【发布时间】:2017-10-02 16:05:15
【问题描述】:
我有两个表的问题,我需要比较同一参考的日期。问题是
- 日期是不同的格式和
- 两个日期单元格中还包含多余的数据。
全球
No. Date
1 1992-08-25 00:00:00.000
2 2015-05-19 00:00:00.000
3 2000-01-12 00:00:00.000
本地
No. Date
1 25.08.1992 00:00:00.000000000 GMT
1 28.08.1992 00:00:00.000000000 GMT
2 19.05.2015 00:00:00.000000000 GMT
3 12.01.2000 00:00:00.000000000 GMT
3 17.01.2000 00:00:00.000000000 GMT
请注意,两个表之间的日期格式不同,并且包含大量不需要的时间和零数据。所以理想情况下,我希望看到格式为DD-MM-YYYY。
我只想返回本地日期与全局日期不同的全局和本地条目。所以从上面的数据,我想看看:
No. Date No. Date
1 25-08-1992 1 28-08-1992
3 12-01-2000 3 17-01-2000
到目前为止,我会进行尝试,但老实说,我不知道如何解决部分单元格匹配和重新格式化问题。
有什么想法吗?
更新: 我尝试了@Sarslan 的解决方案并替换了我的表和字段名称,结果如下:
WITH G AS
(
SELECT [UPC], CONVERT(DATE,LEFT([GLOBAL RELEASE DATE], CHARINDEX(' ',
[GLOBAL RELEASE DATE])),120) [Date] FROM [dsched_migration].[emi].
[EMI_Global]
)
,L AS
(
SELECT [UPC], CONVERT(DATE,LEFT([TERR_REL_DATE], CHARINDEX(' ',
[TERR_REL_DATE])),104) [Date] FROM [dsched_migration].[emi].
[terr_release_dates]
)
SELECT
G.UPC, CONVERT(VARCHAR,G.Date,105) [GLOBAL RELEASE DATE],
L.UPC, CONVERT(VARCHAR,L.Date,105) [TERR_REL_DATE]
FROM
G INNER JOIN L ON L.UPC = G.UPC
WHERE L.Date <> G.Date
我不断收到此错误:
消息 241,第 16 级,状态 1,第 7 行
从字符串转换日期和/或时间时转换失败。
【问题讨论】:
-
为什么首先将它们存储为字符串?使用实际的日期/时间列类型将消除这样的问题
-
不幸的是,这就是从我的供应商那里收到数据的方式。我无法控制如何接收它。
标签: sql sql-server tsql datetime