You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL ISDATE函数异常?SQL Server日期格式转换UPDATE语句报错求助

解决SQL Server中日期格式统一的问题

首先得指出你遇到报错的核心原因:SQL Server并不支持Oracle的TO_DATE()函数,而且ISDATE()在SQL Server里也只有一个参数,不能指定格式来判断,这两个函数的用法是Oracle生态里的,放到SQL Server里自然会报错。另外你语句里的varchar是SQL的关键字,不能直接用来指代列名,应该替换成你的实际列名(也就是wk_date)。

针对你的需求——把dd/mm/yyyy格式的日期字符串转换为yyyy-mm-dd格式,这里给你提供SQL Server原生的解决方案:

UPDATE T1_fact
SET wk_date = CONVERT(varchar(10), TRY_CONVERT(date, wk_date, 103), 23)
WHERE TRY_CONVERT(date, wk_date, 103) IS NOT NULL

语句解释:

  • TRY_CONVERT(date, wk_date, 103):SQL Server里的TRY_CONVERT函数可以尝试按指定格式转换数据,其中103是dd/mm/yyyy的格式代码。如果wk_date是这个格式的有效日期,会返回对应的date类型值;如果不是(比如本身就是yyyy-mm-dd格式或者无效字符串),则返回NULL。
  • CONVERT(varchar(10), ..., 23):把转换后的date类型值再转成字符串格式,23是yyyy-mm-dd的格式代码,varchar(10)刚好匹配这个格式的长度。
  • WHERE子句:只筛选出能被103格式成功转换的行,也就是原本是dd/mm/yyyy格式的那些数据,避免影响已经是yyyy-mm-dd格式的行。

额外注意事项:

  1. 如果你的wk_date列是DATE/DATETIME类型,其实不需要存储字符串格式——数据库里的日期类型是统一的二进制存储,显示格式只是客户端工具的设置,这种情况下你不需要做任何转换,只要确保输入的日期能被正确解析即可。
  2. TRY_CONVERT是SQL Server 2012及以后版本才支持的,如果你的版本更老,可以用CASE结合ISDATE(但要注意先执行SET DATEFORMAT dmy;来确保ISDATE能正确识别dd/mm/yyyy格式),不过更推荐升级到较新的版本使用TRY_CONVERT,它更安全,不会因为无效数据导致整个更新失败。
  3. 执行更新前建议先执行SELECT语句验证结果:
    SELECT wk_date AS 原日期,
           CONVERT(varchar(10), TRY_CONVERT(date, wk_date, 103), 23) AS 转换后日期
    FROM T1_fact
    WHERE TRY_CONVERT(date, wk_date, 103) IS NOT NULL
    

内容的提问来源于stack exchange,提问作者MSM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:34:12