Azure Data Studio插入公历日期自动转回历的解决方法咨询
解决Azure Data Studio中日期显示为回历的问题
核心原因
SQL Server/Azure SQL数据库中日期以二进制形式存储,并无“公历/回历”之分,显示格式由会话语言设置、数据库默认语言或客户端(Azure Data Studio)的区域配置决定。你遇到的情况是:数据库存储的是公历日期,但Azure Data Studio用回历格式显示;查询时需传入公历格式字符串(因为会话解析时按公历处理),回历格式字符串无法被正确解析,所以无结果。
可行解决步骤
1. 修正数据库/登录账号的默认语言
- 查看当前数据库的默认语言与排序规则:
SELECT name, default_language_name, collation_name FROM sys.databases WHERE name = '你的员工管理数据库名'; - 将数据库默认语言改为英语(对应公历):
ALTER DATABASE 你的员工管理数据库名 SET DEFAULT_LANGUAGE = us_english; - 检查当前登录账号的默认语言,若为回历相关语言,一并修改:
-- 查看登录账号默认语言 SELECT name, default_language_name FROM sys.server_principals WHERE name = '你的登录用户名'; -- 修改登录账号默认语言 ALTER LOGIN 你的登录用户名 WITH DEFAULT_LANGUAGE = us_english;
2. 调整Azure Data Studio的会话与全局设置
- 临时生效:在查询窗口执行以下语句,强制当前会话使用公历格式显示日期:
执行后重新查询日期,验证显示是否正常。SET LANGUAGE us_english; SET DATEFORMAT ymd; - 永久生效:打开Azure Data Studio设置(快捷键
Cmd + ,),搜索SQL Server: Default Language,设置为English (United States);同时搜索Date Format,设置为YYYY-MM-DD。
3. 确认日期列的存储类型(关键)
如果你的日期列是VARCHAR/NVARCHAR等字符串类型(而非DATE/DATETIME/DATETIME2),需先转换为标准日期类型:
- 备份目标表数据,避免转换出错。
- 将回历字符串转换为公历日期并更新:
-- 131是回历(Hijri)的格式代码,适用于dd/mm/yyyy格式的回历字符串 UPDATE 你的表名 SET 日期列 = CONVERT(DATE, 日期列, 131); - 修改列类型为标准日期类型:
ALTER TABLE 你的表名 ALTER COLUMN 日期列 DATE;
4. 验证修改效果
- 插入一条测试数据:
INSERT INTO 你的表名(日期列) VALUES ('2024-05-20'); - 查询验证:
确认查询结果显示为公历日期,且用公历格式查询能正常返回数据。SELECT 日期列 FROM 你的表名 WHERE 日期列 = '2024-05-20';
额外排查点
检查Mac系统的区域设置:打开系统偏好设置 > 语言与地区,确保“地区”选择使用公历的区域(如“中国”“美国”),避免系统区域影响Azure Data Studio的显示逻辑。
内容的提问来源于stack exchange,提问作者user23487546
相关产品推荐
相关产品推荐

