【发布时间】: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