我有两个表的问题,我需要比较相同参考的日期。问题是
全局
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
。
我想仅返回本地日期与全球日期不同的全局和本地条目。所以从上面的数据来看,我想看看:
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
到目前为止我会尝试,但说实话,我不知道如何处理部分单元格匹配和重新格式化。
有什么想法吗?
更新: 我尝试了@Sarslan的解决方案并替换了我的表和字段名称,结果是:
class TranslationText {
Language language
String text
static mapping = {
language cascade: 'evict'
}
}
我一直收到这个错误:
Msg 241,Level 16,State 1,Line 7
从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:0)
select * from
(
select a.no, to_char(a.date,'DD-mm-YYY') Date1 , b.no, to_char(b.date,'DD-mm-YYY') Date2
from Global a inner join Local b on (a.no=b.no)
)
where Date1<>Date2;
答案 1 :(得分:0)
你可以尝试一下吗?
;WITH G AS
(
SELECT [No], CONVERT(DATE,LEFT([Date], CHARINDEX(' ', [Date])),120) [Date] FROM [GLobal]
)
,L AS
(
SELECT [No], CONVERT(DATE,LEFT([Date], CHARINDEX(' ', [Date])),104) [Date] FROM [Local]
)
SELECT
G.No, CONVERT(VARCHAR,G.Date,105) [Date],
L.No, CONVERT(VARCHAR,L.Date,105) [Date]
FROM
G INNER JOIN L ON L.No = G.No
WHERE L.Date <> G.Date
结果
No Date No Date
----------- ------------------------------ ----------- ------------------------------
1 25-08-1992 1 28-08-1992
3 12-01-2000 3 17-01-2000
答案 2 :(得分:0)
当你有一些格式化的字符串时,格式永远不会改变你可以像这样简化它 - 这也会给你更大的灵活性 - :
;with tg as (
select [No],
-- Format is : yyyy-mm-dd
left([Date], 4) yyyy, substring([Date], 6, 2) mm, substring([Date], 9, 2) dd
from g
), tl as (
select [No],
-- Format is: dd-mm-yyyy
substring([Date], 7, 4) yyyy, substring([Date], 4, 2) mm, left([Date], 2) dd
from l
)
select *
from tg
inner join tl
on tg.[No] = tl.[No]
and not (tg.yyyy = tl.yyyy and tg.mm = tl.mm and tg.dd = tl.dd);
答案 3 :(得分:0)
感谢所有回复,但找到了解决方案:
创建一个新列然后运行此查询以确认转换:
SELECT '19.10.2009 00:00:00.000000000 GMT',
CONVERT(datetime, LEFT('19.10.2009 00:00:00.000000000 GMT',10), 104)
这给了我正确的格式然后我运行以下查询以使用格式化日期更新新列:
update LocalDate
set REL_DATE = CONVERT(datetime, LEFT(TERR_REL_DATE,10), 104)
幸运的是我的全球日期已经在日期时间,所以我只是简单地加入了两个表格并对新的更新时间进行了比较