Sql Server-日期转换

时间:2013-11-21 17:10:21

标签: sql sql-server date datetime reporting-services

遵循自定义转换器函数,该函数将字符串值(带偏移的完整日期)转换为日期时间,并仅提取日期部分并将提取的日期部分转换为varchar。我知道这是精神上的。但是,这是数据提取和报告(SSRS)的一部分。

ISNULL(CONVERT(varchar(16), CONVERT(datetime,dt, 103), 20), '')

其中dt是我的列,其中我将“带偏移的完整日期时间”存储为字符串

按预期工作,不包括在一个案例中。即如果dt没有值或空字符串,则上述函数(CONVERT(datetime,dt, 103), 20))的一部分返回一个值1900/01/01。此1900/01/01随后转换为字符串。这是罪,我不希望dt值的最终转换值中的任何数据为空。

问题:有人可以帮助我发现上述转换器功能中的问题(如果有的话)。如果没有,谁将成为这里的罪魁祸首,返回1900/01/01。

3 个答案:

答案 0 :(得分:8)

dt替换为NULLIF(dt, '')

(另外,请停止将日期存储为字符串。请。)

答案 1 :(得分:0)

这有助于您发现问题:

SELECT CONVERT(datetime,'', 103)

返回1900-01-01 00:00:00.000

也许案例结构可以帮助您解决问题。那将是我的方法。

答案 2 :(得分:0)

使用ISDATE()功能。如果您有SQL Server 2012,请使用TRY_CONVERT()功能。这些将抵御所有不良投入,而不仅仅是你事先想到的那些。