sql-server - 为什么这个 char 值不转换为日期时间?
问题描述
我有一个性能监视器实例,将数据保存到 MS SQL 服务器数据库上的表中。性能数据保存到名为 CounterData 的表中。该表有一个 char(24) 字段 (counterdatetime) 用于存储数据的日期/时间。我试图将该字段视为日期时间数据,但我不断收到“从字符串转换日期和/或时间时转换失败”。
以下是来自 counterdatetime 的数据示例:2019-07-02 09:19:46.300
我尝试了 CAST 和 CONVERT 的不同变体,以允许我将这些数据作为日期时间处理。例如:
SELECT CAST(counterdatetime as datetime) from CounterData
SELECT CAST(counterdatetime as datetime2) from CounterData
SELECT CONVERT(datetime,counterdatetime,101) from CounterData
每个都给我“转换失败......” 错误。我想也许失败是由一条记录中的虚假值触发的,所以我尝试使用指定一个好值的 WHERE 表达式来限制转换。我还尝试转换值本身,如:
SELECT CAST('2019-07-02 09:19:46.300' as datetime)
在这种情况下,CAST 起作用。
为什么当我从表中选择值时它不起作用?
更新
@Jeroen Mostert 在评论中提供了答案,我将其作为答案发布。
解决方案
我不确定文字'2019-07-02 09:19:46.300'
是否是实际使您的查询崩溃的文本值。如果您使用的是 SQL Server 2012 或更高版本,则有一个帮助函数TRY_CONVERT
将尝试将输入字符串转换为特定类型(在本例中为日期时间),并且将返回转换后的日期时间值,或者NULL
如果转换失败。
尝试运行以下查询:
SELECT
counterdatetime
FROM CounterData
WHERE
TRY_CONVERT(datetime, counterdatetime) IS NULL;
如果您在结果集中看到任何记录,则表示这些值无法成功转换。
推荐阅读
- laravel - 另一个表中的列总和 - laravel
- python - 我可以从 python 程序自动化这个经过 twilio 验证的电话号码列表吗
- python - 条带更新订阅python
- excel - 如何停止 Excel VBA workbook_open 事件?
- python - 无法覆盖 __str__ 方法
- c - 将文件作为命令行参数传递不会在 CLion 中注册为路径
- haskell - 用 Haskell 中的字符串替换字符串中的每个数字
- database-design - 当涉及到 1-1 关系时,应该使用 PK-PK 或 PK-FK 链接吗?
- python - ImportError:无法导入名称“execution_result_pb2”
- r - 基于分支逻辑创建子集