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

SQL Server中如何用单引号正确包裹子串拼接实现日期转换?

解决SQL Server中无分隔符日期字符串转日期类型的问题

你的问题出在两个核心点:

  1. 直接用CONVERT(date,[EntryDate],110)失败,是因为EntryDate的值是无分隔符的01312009,而格式110(mm-dd-yyyy)要求输入字符串必须带连字符分隔,数据库无法识别无分隔的8位数字串为对应格式的日期。
  2. 你写的拼接语句错误地把整个substring表达式用单引号包裹了,这会让数据库把这段代码当成普通字符串字面量,而不是执行函数计算,自然无法转换成日期。

正确写法

方法一:子串拼接法

去掉单引号,让数据库执行substring函数并拼接结果:

SELECT CONVERT(date, SUBSTRING([EntryDate], 1, 2) + '-' + SUBSTRING([EntryDate], 3, 2) + '-' + SUBSTRING([EntryDate], 5, 4))
FROM DateEntries

这段代码会先把01312009拆分为01、31、2009,拼接成符合格式的01-31-2009,再转换成日期类型,最终得到2009-01-31。

方法二:STUFF函数简化法

用STUFF函数直接插入分隔符,避免多次substring操作:

SELECT CONVERT(date, STUFF(STUFF([EntryDate], 3, 0, '-'), 6, 0, '-'))
FROM DateEntries
  • 第一次STUFF在第3个字符位置插入-,将01312009转为01-312009
  • 第二次STUFF在第6个字符位置插入-,最终得到01-31-2009,再转换为日期类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:00:19