如何将不同格式的日期与sql server中的getdate()进行比较

时间:2014-11-13 02:50:50

标签: sql-server datetime

我有一个列,其中日期值存储在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格式本身显示

3 个答案:

答案 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)

正如评论中所说,正确的方法是使用适当的数据类型(datedatetime)。但是如果你 使用日期作为字符串,你至少可以更简单地做一些事情,例如:

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

相关问题