SQL Server中如何用单引号正确包裹子串拼接实现日期转换?
解决SQL Server中无分隔符日期字符串转日期类型的问题
你的问题出在两个核心点:
- 直接用
CONVERT(date,[EntryDate],110)失败,是因为EntryDate的值是无分隔符的01312009,而格式110(mm-dd-yyyy)要求输入字符串必须带连字符分隔,数据库无法识别无分隔的8位数字串为对应格式的日期。 - 你写的拼接语句错误地把整个
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
相关产品推荐
相关产品推荐

