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

求助:在UPDATE语句中将Idx20列转换为yyyy/mm/dd hh:mm:ss.mmm格式datetime

解决日期转换为datetime类型的问题

我明白你现在卡在把Idx20列转换成指定格式的datetime类型上了,之前用CAST没成功,咱们一步步来解决这个问题:

首先得明确两个关键点:

  • 数据库里的datetime类型本身不存储格式,它是一个时间戳数值,格式只是查询或显示时的表现形式。如果你是想把DEL.Idx7的内容转换成datetime类型存储到SMS.Idx20,重点是先把DEL.Idx7正确转换为datetime,再做时间调整;如果SMS.Idx20是字符串类型,那才需要把datetime格式化为你要的yyyy/mm/dd hh:mm:ss.mmm字符串。

针对你的UPDATE语句,我给你两种场景的修改方案:

场景1:SMS.Idx20是datetime/datetime2类型

如果目标列是datetime类型,咱们需要先确保DEL.Idx7能正确转换成datetime,再减去1小时。这里推荐用TRY_CONVERT替代CAST,它能避免无效日期导致整个UPDATE失败:

UPDATE SMS 
SET SMS.Idx15 = DEL.Idx4, 
    SMS.Idx16 = DEL.Idx5, 
    -- 先把DEL.Idx7转成datetime,再减1小时
    SMS.Idx20 = DATEADD(HOUR, -1, TRY_CONVERT(DATETIME, DEL.Idx7, 121))
FROM idmsSMSOutBox SMS 
INNER JOIN idmsSMSDelivery DEL ON RIGHT(SMS.Idx3,8) = DEL.Idx3 
WHERE SMS.Idx15 = 'Delivering'
-- 可选:过滤掉转换失败的记录,避免Idx20被设为NULL
-- AND TRY_CONVERT(DATETIME, DEL.Idx7, 121) IS NOT NULL
  • 这里的121是SQL Server的日期格式代码,对应yyyy-mm-dd hh:mi:ss.mmm(24h),如果DEL.Idx7的原始格式是其他的(比如dd/mm/yyyy),需要换成对应的格式代码(比如103)。你可以先跑这条测试语句确认转换是否正确:
    SELECT DEL.Idx7, TRY_CONVERT(DATETIME, DEL.Idx7, 121) AS converted_date
    FROM idmsSMSDelivery
    

场景2:SMS.Idx20是字符串类型(需存储为指定格式)

如果必须把日期以yyyy/mm/dd hh:mm:ss.mmm的字符串形式存储,那需要先转换为datetime,调整时间后再格式化为字符串,同时替换掉默认的-为/:

UPDATE SMS 
SET SMS.Idx15 = DEL.Idx4, 
    SMS.Idx16 = DEL.Idx5, 
    SMS.Idx20 = REPLACE(
        CONVERT(VARCHAR(23), DATEADD(HOUR, -1, TRY_CONVERT(DATETIME, DEL.Idx7, 121)), 121),
        '-',
        '/'
    )
FROM idmsSMSOutBox SMS 
INNER JOIN idmsSMSDelivery DEL ON RIGHT(SMS.Idx3,8) = DEL.Idx3 
WHERE SMS.Idx15 = 'Delivering'
  • VARCHAR(23)刚好能容纳yyyy/mm/dd hh:mm:ss.mmm的长度,避免截断。

额外排查建议

如果之前用CAST失败,大概率是DEL.Idx7里有不符合日期格式的数据,你可以用这条语句找出这些无效记录:

SELECT DEL.Idx7
FROM idmsSMSDelivery
WHERE TRY_CONVERT(DATETIME, DEL.Idx7, 121) IS NULL

先修正这些无效数据,再执行UPDATE会更稳妥。

内容的提问来源于stack exchange,提问作者M. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:14