SQL NESTED用于清除错误数据的查询

时间:2012-01-18 18:38:27

标签: mysql sql database

问题描述:

我想读取我的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”条件检查吗?另外如何添加替换以检查所有条件?

最好是针对每种情况单独进行吗?

请指教。 谢谢。

1 个答案:

答案 0 :(得分:1)

首先,这些查询不会按照您的想法执行。最大的问题是有两个单引号,它们一起用于字符串。因此,您的前两个查询实际上是检查字符串":" OR "-"); SELECT budget, descp FROM YearlyBudget WHERE CONTAINS(budget,是否存在。

其次,在包含中执行":" OR "-"不会检查这两个字符串。相反,字符串将被评估为数字,然后与二进制OR组合。具体来说,他们将评估为0然后0或0将给你0,所以你正在检查CONTAINS(预算,0)。

第三,您的替换不会取代:,而是取代":"。因此,它不会替换:字符,除非它被双引号包围。

第四,我的谷歌搜索表明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 OR B = 1将为真。