【问题标题】:How can I deal with inconsistent data values for number of bedrooms?如何处理卧室数量不一致的数据值?
【发布时间】:2015-04-25 05:10:50
【问题描述】:

我正在创建一个 API 并处理一个旧数据库,它的 number_bedrooms 值不一致。在 7000 个单位中,43 个具有非整数/数字值。

有效整数的范围基本上是1-7。有些具有“2+Loft”或“2 + Loft”或“Studio”或“5+”之类的值。

由于这是一个遗留数据库,我无法真正改变事物(许多应用程序都在使用它,并且可能使用“2+Loft”对 sql 查询进行硬编码)我正在考虑创建一个新的int_bedrooms 列。

类似:

UPDATE table 
SET int_bedrooms = number_bedrooms 
WHERE
number_bedrooms IS NOT NULL and number_bedrooms > 0

这是最可行的方法吗?另外我可以使用哪个函数(CONVERT,CASt)来可靠地转换:

'5+' into '5'
'2 + Loft' into '2'
'2 + Den' into '2'

【问题讨论】:

  • 这不是答案,我也不会假装是,但是你为什么不自己手动做43条记录呢?无论如何,您将不得不在之后测试/审查它们......
  • @jdu - 我正在考虑,但这些目前在应用程序中使用,并且某些应用程序可能具有硬编码的 sql 查询,例如“number_bedrooms IN ("2 +Loft") 等。我没有不想“破坏”任何东西。
  • 但是为什么需要将这些数据转换为 INT?解决方案取决于您的答案,因为如果您不打算再拥有那些“5+”等...,那么您可以使用 INT 创建新字段,并将这 43 条记录的值设置为 5、2 等...但是如果您认为将来可能会出现相同的值 - 为什么需要摆脱这些值?
  • 您的第一个“UPDATE”语句将更改这些值。您的意思是要构建一个在 SELECT 期间使用函数的 SQL 语句吗?而不是更改值并将它们放在新列中?
  • @Alex - 我正在考虑强制输入一个数字以供将来输入,但这可能不会被批准。很可能不会。所以你认为不值得创建一个新列而只是 CONVERTing 当前列?

标签: mysql casting database-schema


【解决方案1】:
UPDATE table 
SET int_bedrooms = CAST(number_bedrooms AS UNSIGNED) ;

【讨论】:

  • 这与CONVERT( field, UNSIGNED INTEGER) 有什么区别?
  • dev.mysql.com/doc/refman/5.0/en/charset-convert.html CONVERT 主要是关于 CONVERT() 提供了一种在不同字符集之间转换数据的方法 我刚刚重读了手册,在你的情况下,这两个语句是一样。
猜你喜欢
  • 2023-02-19
  • 2020-07-09
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多