如何通过SQL语句将表中1900-01-01替换为NULL值?
解决datetime字段默认存1900-01-01改为NULL的问题
没问题,咱们一步步来搞定这个需求~首先先纠正你现有UPDATE语句里的小语法错误:多个字段赋值时要用逗号分隔,比如SET animalname = 'Mary', animaltype = 'Husky',不然会报语法错误哦。
针对你的需求,分两种场景来处理:
1. 修改已存在的1900-01-01数据为NULL
如果是要把表中所有(或特定)已经存成1900-01-01的记录改成NULL,其实不需要复杂的CASE语句,直接过滤条件后更新就行:
-- 修改所有符合条件的记录 UPDATE animals_table SET dategiven = NULL WHERE dategiven = '1900-01-01'; -- 如果你只想修改特定animalid的记录,加上额外条件 UPDATE animals_table SET dategiven = NULL WHERE dategiven = '1900-01-01' AND animalid = '123456';
2. 在更新其他字段时,同步处理dategiven字段
如果是像你原来的需求那样,更新animalname和animaltype的同时,把该记录的dategiven如果是1900-01-01改成NULL,这时候CASE语句就派上用场了,但要注意CASE的正确用法——它是用来返回一个值的,不是写在WHERE条件里:
UPDATE animals_table SET animalname = 'Mary', animaltype = 'Husky', -- 当dategiven是1900-01-01时设为NULL,否则保留原值 dategiven = CASE WHEN dategiven = '1900-01-01' THEN NULL ELSE dategiven END WHERE animalid = '123456';
3. 从源头避免出现1900-01-01
上面的方法是处理已有的数据,更彻底的是从源头解决:检查你的dategiven字段是否允许为NULL,以及是否设置了默认值为1900-01-01。如果是的话,修改表结构:
-- 允许字段为NULL(如果之前不允许的话) ALTER TABLE animals_table ALTER COLUMN dategiven DATETIME NULL; -- 如果字段有默认值1900-01-01,去掉这个默认值 ALTER TABLE animals_table ALTER COLUMN dategiven DROP DEFAULT;
这样以后插入或更新时,空值就会直接存储为NULL,而不是自动转成1900-01-01了。
内容的提问来源于stack exchange,提问作者Celestialchippy
相关产品推荐
相关产品推荐

