如何规范数据格式?
How to standardize data format?
我在 SQL 中收集数据时遇到问题,显然,我们其中一台生产设备的程序员在 MS Access 数据库中进行了更新并更改了日期格式,这给我带来了麻烦查找特定日期。
你能推荐一下如何标准化日期吗?
请看一下我在这里添加的查询结果:
Prod_Date
-------------
8/24/2020
8/23/2020
8/22/2020
2020-08-24
2020-08-23
2020-08-22
2020-08-21
2020-08-20
2020-08-19
如果你不做DMY,你可以简单地使用try_convert()
例子
Declare @YourTable Table ([Prod_Date] varchar(50))
Insert Into @YourTable Values
('8/24/2020')
,('8/23/2020')
,('8/22/2020')
,('2020-08-24')
,('2020-08-23')
,('2020-08-22')
,('2020-08-21')
,('2020-08-20')
,('2020-08-19')
Select *
,AsDate = try_convert(date,[Prod_Date])
from @YourTable
Returns
Prod_Date AsDate
8/24/2020 2020-08-24
8/23/2020 2020-08-23
8/22/2020 2020-08-22
2020-08-24 2020-08-24
2020-08-23 2020-08-23
2020-08-22 2020-08-22
2020-08-21 2020-08-21
2020-08-20 2020-08-20
2020-08-19 2020-08-19
date
列 没有 格式,这意味着您的“日期”列不是 date
,而是 varchar
.有一个“简单”的方法来解决这个问题,修复列的数据类型。
希望 你只有两种格式,yyyy-MM-dd
和 M/d/yyyy
。如果是这样,那么我们可以使用这个样本集:
CREATE TABLE dbo.YourTable (Prod_Date varchar(10))
INSERT INTO dbo.YourTable
VALUES ('8/24/2020'),
('8/23/2020'),
('8/22/2020'),
('2020-08-24'),
('2020-08-23'),
('2020-08-22'),
('2020-08-21'),
('2020-08-20'),
('2020-08-19');
首先,我们需要获取ISO格式的数据,具体我将使用yyyyMMdd
。不幸的是,为此我们需要几个带有样式代码的嵌套 CONVERT
:
UPDATE dbo.YourTable
SET Prod_Date = TRY_CONVERT(varchar(8),ISNULL(TRY_CONVERT(date,Prod_Date,101),TRY_CONVERT(date,Prod_Date,23)),112);
然后我们可以更改列的数据类型:
ALTER TABLE dbo.YourTable ALTER COLUMN Prod_date date; --Add NULL if needed
然后你的 table 中就没有格式了,问题就不会再发生了。
我在 SQL 中收集数据时遇到问题,显然,我们其中一台生产设备的程序员在 MS Access 数据库中进行了更新并更改了日期格式,这给我带来了麻烦查找特定日期。
你能推荐一下如何标准化日期吗?
请看一下我在这里添加的查询结果:
Prod_Date
-------------
8/24/2020
8/23/2020
8/22/2020
2020-08-24
2020-08-23
2020-08-22
2020-08-21
2020-08-20
2020-08-19
如果你不做DMY,你可以简单地使用try_convert()
例子
Declare @YourTable Table ([Prod_Date] varchar(50))
Insert Into @YourTable Values
('8/24/2020')
,('8/23/2020')
,('8/22/2020')
,('2020-08-24')
,('2020-08-23')
,('2020-08-22')
,('2020-08-21')
,('2020-08-20')
,('2020-08-19')
Select *
,AsDate = try_convert(date,[Prod_Date])
from @YourTable
Returns
Prod_Date AsDate
8/24/2020 2020-08-24
8/23/2020 2020-08-23
8/22/2020 2020-08-22
2020-08-24 2020-08-24
2020-08-23 2020-08-23
2020-08-22 2020-08-22
2020-08-21 2020-08-21
2020-08-20 2020-08-20
2020-08-19 2020-08-19
date
列 没有 格式,这意味着您的“日期”列不是 date
,而是 varchar
.有一个“简单”的方法来解决这个问题,修复列的数据类型。
希望 你只有两种格式,yyyy-MM-dd
和 M/d/yyyy
。如果是这样,那么我们可以使用这个样本集:
CREATE TABLE dbo.YourTable (Prod_Date varchar(10))
INSERT INTO dbo.YourTable
VALUES ('8/24/2020'),
('8/23/2020'),
('8/22/2020'),
('2020-08-24'),
('2020-08-23'),
('2020-08-22'),
('2020-08-21'),
('2020-08-20'),
('2020-08-19');
首先,我们需要获取ISO格式的数据,具体我将使用yyyyMMdd
。不幸的是,为此我们需要几个带有样式代码的嵌套 CONVERT
:
UPDATE dbo.YourTable
SET Prod_Date = TRY_CONVERT(varchar(8),ISNULL(TRY_CONVERT(date,Prod_Date,101),TRY_CONVERT(date,Prod_Date,23)),112);
然后我们可以更改列的数据类型:
ALTER TABLE dbo.YourTable ALTER COLUMN Prod_date date; --Add NULL if needed
然后你的 table 中就没有格式了,问题就不会再发生了。