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

LEFT JOIN中LogonTime列DATE类型转换失败问题求助

问题与解决方案

问题描述

使用CONVERT、CAST、TRY_CONVERT函数无法将LogonTime列转换为DATE类型,转换为VARCHAR时结果显示为月份名称格式(如NOV 17 2022 10:56 AM)。该列示例值为11/17/2022 10:56:38 PM,期望得到11/17/2022或11-17-2022格式的日期字符串。

原查询语句:

SELECT Subquery.*, rl.LogonTime as Logon 
FROM (SELECT su.Name, sg.Name as Security 
    FROM SecUser su
    LEFT JOIN SecGroupChild sgc ON sgc.ChildKey = su.UniqueID
    LEFT JOIN SecGroup sg ON sgc.GroupKey = sg.UniqueID
) AS Subquery
LEFT JOIN (
    SELECT Username, LogonTime
    FROM RankedLogins
    WHERE RowNum = 1
) 
rl ON rl.Username = Subquery.Name

解决方案

核心原因

大概率是LogonTime列实际存储类型为字符串(而非datetime类型),直接转换时因格式不匹配导致失败;未指定转换样式时,SQL Server会使用默认格式输出月份名称。

修改后的查询语句

根据期望格式选择以下任一方式修改子查询中的LogonTime处理逻辑:

方式1:输出11/17/2022格式

SELECT Subquery.*, rl.FormattedLogonTime as Logon 
FROM (SELECT su.Name, sg.Name as Security 
    FROM SecUser su
    LEFT JOIN SecGroupChild sgc ON sgc.ChildKey = su.UniqueID
    LEFT JOIN SecGroup sg ON sgc.GroupKey = sg.UniqueID
) AS Subquery
LEFT JOIN (
    SELECT Username, 
           -- 先将字符串按mm/dd/yyyy HH:MI:SS PM格式转为datetime,再转为指定格式的字符串
           CONVERT(varchar, TRY_CONVERT(datetime, LogonTime, 101), 101) AS FormattedLogonTime
    FROM RankedLogins
    WHERE RowNum = 1
) 
rl ON rl.Username = Subquery.Name

方式2:输出11-17-2022格式

SELECT Subquery.*, rl.FormattedLogonTime as Logon 
FROM (SELECT su.Name, sg.Name as Security 
    FROM SecUser su
    LEFT JOIN SecGroupChild sgc ON sgc.ChildKey = su.UniqueID
    LEFT JOIN SecGroup sg ON sgc.GroupKey = sg.UniqueID
) AS Subquery
LEFT JOIN (
    SELECT Username, 
           -- 先转datetime,再用样式110输出mm-dd-yyyy格式
           CONVERT(varchar, TRY_CONVERT(datetime, LogonTime, 101), 110) AS FormattedLogonTime
    FROM RankedLogins
    WHERE RowNum = 1
) 
rl ON rl.Username = Subquery.Name

关键参数说明

  • TRY_CONVERT(datetime, LogonTime, 101):样式101对应mm/dd/yyyy格式,确保字符串能正确转为datetime类型;
  • CONVERT(varchar, ..., 101):将datetime类型转为mm/dd/yyyy格式的字符串;
  • CONVERT(varchar, ..., 110):将datetime类型转为mm-dd-yyyy格式的字符串。

如果LogonTime本身是datetime类型,可简化为直接使用CONVERT(varchar, LogonTime, 101)或CONVERT(varchar, LogonTime, 110)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:26