问题描述:
我想读取sql表中一列中的数据并清理其值。
它实际上应该仅具有长度为9的“数字”。
当前为varchar(11),其值包含:A:123456789、1-2:3456789、123456789H,A-123456789等。
如何为表的不同值添加多个检查,并替换不正确的值并更新我的表。
我试图纠正搜索功能以检查是否包含的值是:,-
SELECT budget, descp
FROM yearlybudget
WHERE CONTAINS(budget, '":" OR "-");
SELECT budget, descp
FROM yearlybudget
WHERE CONTAINS(budget, '":" AND "-");
UPDATE dbo.yearlybudget
SET budget = replace(budget, '":"', '""')
WHERE CONTAINS(budget, '":");
上面是3个不同的SQL语句。无论如何,我是否可以合并“
OR
”和“ AND
”条件检查?另外,如何添加替换以检查所有条件?最好针对每种情况分别进行处理吗?
请指教。
谢谢。
最佳答案
首先,这些查询不会执行您认为的操作。最大的问题是有两个单引号,它们一起组成一个字符串。因此,您的前两个查询实际上是在检查字符串":" OR "-"); SELECT budget, descp FROM YearlyBudget WHERE CONTAINS(budget,
是否存在。
其次,在contains中执行":" OR "-"
不会同时检查这两个字符串。而是将字符串评估为数字,然后将其与二进制OR组合。具体来说,它们的计算结果为0,然后0或0将给您0,因此您要检查CONTAINS(budget,0)。
第三,您的替换不是替换:
,而是":"
。因此,除非用双引号将其括起来,否则它不会替换:字符。
第四,我的Google搜索表明MySQL没有“ CONTAINS”关键字。
您可能想要的查询看起来像这样:
UPDATE dbo.yearlybudget
SET budget = REPLACE(REPLACE(budget,'-',''), ':', '')
WHERE budget LIKE '%:%' OR budget LIKE '%-%';
LIKE字符串中的%表示“在此匹配任何字符”,因此完成了CONTAINS在某些其他数据库管理系统上所做的相同操作。因此,此查询将通过删除所有-和:字符来更新预算列,我认为这是您想要的。如果您想做一些不同的事情,您可能应该说些什么。例如,如果您只想获取不带:或-的预算列版本,则应使用其他查询,因为该查询实际上会更改数据库中的数据。在执行此操作之前,请确保从预算列中删除-,因为这有可能使负预算变为正数,这可能是一个问题。
要回答有关是否可以将OR和AND结合的原始问题,答案可能是,但这取决于您要执行的操作。 OR不是唯一的,所以当A = 1和B = 1时,A = 1或B = 1将为真。
关于mysql - SQL NESTED查询以清除不良数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8915479/