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

如何比较格式化字段并将其用于WHERE子句条件筛选?

解决TblUser表筛选转换后日期无重复记录的问题

原SQL的问题

  • 语法错误:语句结构混乱,FROM TblUser位置错误,且select *与format(...)之间缺少逗号,正确的SQL结构应为SELECT 列 FROM 表 WHERE 条件。
  • 逻辑错误:WHERE DT != DT是同一行内的字段自比较,同一行的计算结果必然相等,这个条件永远为假,无法筛选出任何数据。

可行的实现方法

方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库如SQL Server、PostgreSQL、MySQL 8.0+)

通过窗口函数按转换后的日期分组,计算每组的记录数,再筛选出记录数为1的条目:

SELECT [User], FORMAT(DateTime, 'ddMMyyyy') AS DateTime
FROM (
    SELECT 
        [User],
        DateTime,
        -- 按转换后的日期分组,统计每组的记录数
        COUNT(*) OVER (PARTITION BY FORMAT(DateTime, 'ddMMyyyy')) AS dt_count
    FROM TblUser
) AS sub_query
-- 只保留记录数为1的分组对应的记录
WHERE dt_count = 1;

方法二:使用GROUP BY + 关联查询(兼容旧版数据库)

先通过分组找出唯一的转换后日期,再关联原表获取对应记录:

SELECT u.[User], FORMAT(u.DateTime, 'ddMMyyyy') AS DateTime
FROM TblUser u
INNER JOIN (
    -- 筛选出仅出现一次的转换后日期
    SELECT FORMAT(DateTime, 'ddMMyyyy') AS unique_dt
    FROM TblUser
    GROUP BY FORMAT(DateTime, 'ddMMyyyy')
    HAVING COUNT(*) = 1
) AS unique_dates 
ON FORMAT(u.DateTime, 'ddMMyyyy') = unique_dates.unique_dt;

注意事项

若你的数据库不支持FORMAT函数(如MySQL),可以用对应数据库的日期格式化函数替代:

  • MySQL:DATE_FORMAT(DateTime, '%d%m%Y')
  • PostgreSQL:TO_CHAR(DateTime, 'DDMMYYYY')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:45:31