我有一个列,其中日期值存储在nvarchar
数据类型中。
日期格式为dd-mm-yy, dd.mm.yy
目前,我将-
替换为.
并与get date进行比较,因为其他表格中使用的所有日期格式均为dd.mm.yyyy
格式。
现在考虑一种情况,其中日期可能采用其他格式,如dd/mm/yyyy
或其他日期格式,有没有办法检查日期是否有效并将其与getdate()
进行比较
此外,我发现很少有未知记录可用,如57937234,我需要忽略它们。
截至目前,我正在使用此查询,它运行正常:
select
A.Value, replace( B.Value,'-','.')
from
smpltbl as A
INNER JOIN
smpltbl as B ON A.MSKEY = B.MSKEY
INNER JOIN
smpltbl as tbl_status ON A.MSKEY = tbl_status.MSKEY
where
A.colname = 'XYZ'
AND B.colname = 'ABC'
AND tbl_status.colname = 'Status'
AND tbl_status.Value = 'OK'
AND B.Value <> '00.00.0000'
and B.Value <>'..'
AND replace( B.Value,'-','.') < cast(convert(nvarchar, GETDATE(), 104)
有人可以帮助我接受不同格式的日期与系统日期比较,结果必须以DD.MM.YYYY
格式本身显示
答案 0 :(得分:0)
取决于您使用的SQL Server版本,您可以使用不同的解决方案。
CONVERT(VARCHAR(10), GETDATE(), 103)
答案 1 :(得分:0)
cast((right(date_b,4)+'-'+substring(date_b,4,2)+'-'+left(date_b,2)+' 00:00:00.000') as datetime)
<cast(convert(nvarchar,getdate(),104) as datetime)
当我使用上述比较语句时,我的预期和实际结果是相同的。
答案 2 :(得分:0)
正如评论中所说,正确的方法是使用适当的数据类型(date
或datetime
)。但是如果你 使用日期作为字符串,你至少可以更简单地做一些事情,例如:
CONVERT(date, date_b, 104) < CONVERT(date, GETDATE())
如果您使用的是SQL Server 2005或更早版本:
CONVERT(datetime, date_b, 104) < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
上一个示例中比较的右侧部分是known method of truncation of a datetime value。