如果您需要先将日期转换为 ODBC 规范(以毫秒为单位),您可以使用set dateformat dmy
和try_convert(datatype,val)
不使用该style
组件。
datetime
在转换回/datetime2
时应用 121 样式char()
用于字符串存储。
create table t (dt varchar(32));
insert into t values ('08/03/2017 3:51 PM'),('28/03/2017 7:30 AM');
set dateformat dmy;
select
dt
, tryparse = convert(char(23),try_parse(dt as datetime2(3)),121)
, tryparseBrit = convert(char(23),try_parse(dt as datetime2(3) using 'en-GB'),121)
, tryconvert = convert(char(23),try_convert(datetime2(3),dt),121)
, tryconvert121 = convert(char(23),try_convert(datetime2(3),dt,121),121)
, trycast = convert(char(23),try_cast(dt as datetime2(3)),121)
from t
rextester 演示:http ://rextester.com/GFC92046
返回:
+--------------------+-------------------------+-------------------------+-------------------------+---------------+-------------------------+
| dt | tryparse | tryparseBrit | tryconvert | tryconvert121 | trycast |
+--------------------+-------------------------+-------------------------+-------------------------+---------------+-------------------------+
| 08/03/2017 3:51 PM | 2017-08-03 15:51:00.000 | 2017-03-08 15:51:00.000 | 2017-03-08 15:51:00.000 | NULL | 2017-03-08 15:51:00.000 |
| 28/03/2017 7:30 AM | NULL | 2017-03-28 07:30:00.000 | 2017-03-28 07:30:00.000 | NULL | 2017-03-28 07:30:00.000 |
+--------------------+-------------------------+-------------------------+-------------------------+---------------+-------------------------+
要选择尚未转换的值,您可以使用:
... where dt not like '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]%'