对于格式化为 ISO w/时区 (127) 的字符串,SQL ISDATE 返回 false

标签 sql sql-server datetimeoffset

我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用 SQL Server 转换格式常量将其转换为相应的数据类型。但是,我在 127 "yyyy-mm-ddThh:mi:ss.mmmZ"方面遇到了很多麻烦,因为 ISDATE 对于以这种方式格式化的字符串返回 false。

SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false

这是为什么呢?是否有任何我不知道的内置 SQL Server 函数可以测试这是否是有效的日期字符串?

最佳答案

isdate function接受某些日期(取决于日期格式和语言),但从不接受datetimeoffset。偏移量是示例末尾的 -06:00 部分。

您可以使用try_convert改为样式 120(yyyy-mm-dd hh:mi:ss(24h) ODBC 规范):

SELECT TRY_CONVERT(datetimeoffset, '2018-07-21 15:14:00.5206914 -06:00', 120);
-->
2018-07-21 15:14:00.5206914 -06:00

如果传递的表达式不是有效的datetimeoffsettry_convert 函数将返回null

关于对于格式化为 ISO w/时区 (127) 的字符串,SQL ISDATE 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459479/

相关文章:

sql - 计算切换间隔 SQL Server 的秒数

c# - 由于 <AnonymousType>,无法将 .Union 与 Linq 一起使用

c# - 将字符串转换为 DateTimeOffset 忽略时区

c# - 从 SQL 2008 获取 DateTimeOffset 值到 C#

sql - INFORMATION_SCHEMA.ROUTINES 中的 SPECIFIC_SCHEMA 和 ROUTINE_SCHEMA 有什么区别?

java.lang.ClassCastException : java. lang.String 无法转换为 [Ljava.lang.Object; - 使用 hibernate 从数据库中获取查询

php - 排序多个表 MYSQL DateStamp

mysql - 如何避免列名冲突?

c# - 如何在 Windows 10 通用应用程序中将 CalendarDatePicker 中的仅日期值存储到 SQLite 数据库

sql - IN 子句中可以使用的标量的最大数量是多少?