SQL Server:尝试用大小写转换日期

Posted

技术标签:

【中文标题】SQL Server:尝试用大小写转换日期【英文标题】:SQL Server : trying to convert a date with a case 【发布时间】:2018-11-15 16:02:18 【问题描述】:

我有这个 SQL 代码,用于将保修登记数据传输到设备表。但我收到 4 条错误消息,它们是

消息 102,第 15 级,状态 1,第 3 行 ',' 附近的语法不正确。

消息 102,第 15 级,状态 1,第 16 行 'T1' 附近的语法不正确。

这是我正在使用的代码,用于转换日期并将其放入正确的格式,如YYYY-MM-DD

UPDATE TOP (100) [TEST].[dbo].[Report]
SET [U_DateA] = SUBSTRING((T1.[DateAchat], 3, 1) = '-' 

    [U_CoName] = LEFT((T1.[Individu_prenom] + ' ' + T1.[Individu_nom]), 50),
    [U_CoRue] = T1.[Individu_adresse],
    [U_CoVil] = T1.[Individu_ville],

FROM 
    (SELECT 
         idForm, [FormDateEntree], REPLACE([DateAchat], '/', '-') AS DateAchat,
         [Individu_prenom], [Individu_nom], [Individu_adresse],
         [Individu_ville], [Individu_CpZip], [Individu_Telephone],
         [Individu_Email], [Individu_pays], [Individu_provEtat], 
         [ModeleNo],[ModeleSerie] 
     FROM
         [dTEST2].[dbo].[RegistrTest]) T1

有人有想法吗?

【问题讨论】:

【参考方案1】:

首先,你有两个 (( 在第一个子字符串中,你只需要一个。CASE WHEN SUBSTRING(T1.[DateAchat], 3, 1) = '-'

其次,删除AS DateAchat。您不必在更新查询中指定列名!

不要操作日期和字符串(这取决于您的系统),而是将日期格式设置为 yyyy-mm-dd :

... SET [U_DateA] = CONVERT(CHAR(10), T1.[DateAchat], 126) ...

我希望[U_DateA] 是一个字符串。如果这是一个日期字段,为什么不将其保留为日期?

【讨论】:

是的,它有效,但我没有尝试在这种情况下运行它,知道吗? '从字符串转换日期和/或时间时转换失败。' U_DateA 的类型是什么?

以上是关于SQL Server:尝试用大小写转换日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL 字符串类型的时间怎么比较大小

sql server2000 关于表列转换的问题

sql server2000如何将数字转换为日期时间

MySql中字符串转成日期

sql server CONVERT 日期转换问题

sql server to oracle