我有两列,日期字段date1
和date2
。 在date2
字段我有一些空白值,但我需要计算datediff(day,date1,date2)
。 两个date1
和date2
有条目(包括date2
字段为空值)等于没有datediff的两列,当一列在sqlserver中有空值时
我的要求是计算datediff
仅由既然你在date2
我有两列,日期字段date1
和date2
。 在date2
字段我有一些空白值,但我需要计算datediff(day,date1,date2)
。 两个date1
和date2
有条目(包括date2
字段为空值)等于没有datediff的两列,当一列在sqlserver中有空值时
我的要求是计算datediff
仅由既然你在date2
忽略空值对应于date1
和date2
值存储值VARCHAR
(如在评论中提到的),你可以使用以下命令:
Select DateDiff(Day, Convert(DateTime, Date1), Convert(DateTime, Date2))
From YourTable
Where Date2 <> ''
And Date2 Is Not Null
你应该尽管如此,确实将任何DATE
或DATETIME
值存储为其适当的数据类型以避免并发症。
要验证该数据将转换为日期,在SQL Server 2012
或更高版本,您可以添加额外的Where
条款:
Where Try_Convert(DateTime, Date1) Is Not Null
And Try_Convert(DateTime, Date2) Is Not Null
但SQL Server 2008
,你可以使用ISDATE()
(但它是不准确的臭名昭着的)。
Where IsDate(Date1) = 1
And IsDate(Date2) = 1
您可能还需要设置DateFormat
如果它比你期待什么(例如DD/MM/YYYY
VS MM/DD/YYYY
VS YYYY-MM-DD
等)以外的东西。
Set DateFormat MDY -- Or whatever your date format is in the field.
除此之外...只是看看你的数据,看看它为什么不转换。
我收到以下错误'从字符串转换日期和/或时间时转换失败。 –
@PrasanthG这是你不应该将日期存储为字符串的原因之一。你使用的是什么版本的SQL Server? – Siyual
SQL server 2008. –
'where date2 is not null'?也许你应该读一本关于sql的书并阅读它。 – Will
请添加示例。 – M84
当'date2'为'null'时,你期望的结果是什么?你想完全忽略它还是返回别的东西? – Siyual