以特定格式解析字符串日期,否则失败

时间:2017-10-23 19:57:37

标签: sql-server date parsing datetime

是的,我知道以下不是最佳做法,而是继承了db。

我的字符串为'MM / dd / yy tt:hh:mm'。有时字符串是'tt:hh:mm'错误。

如果我将'tt:hh:mm'转换为datetime,它会成功,并将默认日期设置为1900-01-01。我希望这会失败。

isdate('08:00:00')成功返回1.

我想要以下内容:

myisdatetime(' 08:00:00') fails return 0
myisdatetime( 'MM/dd/yy tt:hh:mm') success returns 1

甚至可以指定日期时间格式。即解析精确。

1 个答案:

答案 0 :(得分:0)

只需使用CONVERT

即可
DECLARE @InputTime VARCHAR(20) = ' 08:00:00';
SELECT TRY_CONVERT(TIME, @InputTime, 114);
SELECT CONVERT(TIME, @InputTime, 114);

您现在应该输入数据 - 如果您想在空间情况下失败 - 只需检查一下:

DECLARE @Result BIT = 0;
SET @Result = CASE CHARINDEX(' ', @InputTime) WHEN 0 THEN 0 ELSE 1 END;
SELECT @Result;

与DATETIME类似

DECLARE @InputDT VARCHAR(20) = '23/10/17 08:00:00';
SELECT TRY_CONVERT(DATETIME, @InputDT, 3);
SELECT CONVERT(DATETIME, @InputDT, 3);

更多:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql