是的,我知道以下不是最佳做法,而是继承了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
甚至可以指定日期时间格式。即解析精确。
答案 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