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

SQL技术问询:排查查询周二入职员工并按姓氏降序排序的SQL问题

你的SQL语句存在两个关键问题
  • DAY格式返回带尾随空格:在Oracle等多数数据库中,TO_CHAR(hire_date, 'DAY')会返回填充了空格的星期名称,长度对齐到当前数据库配置里最长的星期名。比如'TUESDAY'实际会是'TUESDAY '(末尾带空格),直接用= 'TUESDAY'会因为空格不匹配,查不到任何结果。
  • 依赖数据库语言环境:如果数据库的日期语言配置(比如Oracle的NLS_DATE_LANGUAGE)不是英文,TO_CHAR返回的星期名会是对应语言的翻译(比如法语的'MARDI'),这时候和'TUESDAY'对比自然匹配不上。
修正方法

推荐两种更可靠的写法:

  1. 用TRIM去掉空格:
SELECT last_name, hire_date
FROM employees
WHERE TRIM(TO_CHAR(hire_date, 'DAY')) = 'TUESDAY'
ORDER BY last_name DESC;
  1. 用数字格式匹配星期几(不受语言和空格影响,注意不同数据库的星期起始值):
-- Oracle 环境(周日为一周第1天,周二是3)
SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'D') = '3'
ORDER BY last_name DESC;

-- PostgreSQL 环境(周一为一周第1天,周二是2)
SELECT last_name, hire_date
FROM employees
WHERE EXTRACT(DOW FROM hire_date) = 2
ORDER BY last_name DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:48:06