DATE类型列BULK INSERT后格式异常及空值填充问题求助
解决BULK INSERT导入DATE类型列的格式与空值问题
一、日期显示格式问题
SQL Server的DATE类型存储时仅保留年月日,你看到的2023-04-03T00:00:00.0000000是客户端工具(如SSMS)的默认显示格式,并非实际存储内容。要以DD-MM-YYYY格式展示数据,只需在查询时使用转换函数:
- 用
CONVERT函数(性能更优):
SELECT CONVERT(VARCHAR(10), 日期列名, 105) AS 格式化日期 FROM stg.leaveapplication;
(105是SQL Server对应DD-MM-YYYY格式的内置样式码)
- 或用
FORMAT函数(语法更直观):
SELECT FORMAT(日期列名, 'dd-MM-yyyy') AS 格式化日期 FROM stg.leaveapplication;
二、空值被填充为1900-01-01的问题
原因是BULK INSERT默认会把CSV中的空字符串转换为对应数据类型的默认值(DATE类型默认值为1900-01-01)。只需在WITH参数中添加KEEPNULLS选项,即可让空值直接导入为NULL:
修改后的BULK INSERT语句:
SET DATEFORMAT DMY; BULK INSERT stg.leaveapplication FROM 'qa-1/8/testdashboard/Leave dashboard/DatewiseLeaveRoster.csv' WITH ( DATA_SOURCE = 'AzureBlobStorage', FORMAT = 'CSV', FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0A', KEEPNULLS -- 新增参数保留空值 );
内容的提问来源于stack exchange,提问作者Moti Prakash Panda
相关产品推荐
相关产品推荐

