mysql - 在同一调用中将列转换为不同类型

标签 mysql sql casting

我有一个名为 bundle_metadata 的表,其中包含两列“名称”和“值”。我希望值列包含各种数据类型,具体取决于存储的元数据类型。由于缺乏更好的解决方案,我通过将其存储为 varchar 来解决这个问题。

例如,一行可以是 name: 'Price', value: '1000' 和另一个:name: 'Category', value: 'Home' 和第三个名称:'LocationLat',值:'55.15813'

现在解决问题:

一个 select 语句可以是:

SELECT * FROM [bundle_metadata] WHERE (name='Price' AND value BETWEEN 200 AND 3000) OR (name='Category' AND value = 'Home')

这两个调用本身都有效,但是当像上面那样组合时,我得到这个错误:

Conversion failed when converting the nvarchar value '55.158313' to data type int.

注意:值 55.158313 不是来自所选行。我做错了什么?

提前致谢

最佳答案

在 MySQL 中: 使用条件 'column_name >0 ' 这只返回数值

SELECT * FROM `[bundle_metadata]` WHERE (value> 0 ) AND (name='Price' AND cast(value AS DECIMAL(10,2)) BETWEEN 200 AND 3000) OR (name='Category' AND value = 'Home')

在微软 SQL 中: 使用 ISNUMERIC() 方法获取指定列只有数值的行。

MS SQL 查询 1:

SELECT *  FROM  [bundle_metadata]  where (ISNUMERIC(value) =1    AND (name='Price' AND CONVERT(FLOAT,[value]) BETWEEN 200 AND 3000))  OR (name='Category' AND value = 'Home') 

MS SQL 查询 2:

 SELECT * INTO #temp FROM   [bundle_metadata]  where ISNUMERIC(value) =1 
 SELECT * INTO #final FROM #temp WHERE (name='Price' AND CONVERT(FLOAT,[value]) BETWEEN 200 AND 3000)    
 INSERT INTO #final SELECT * FROM bundle_metadata WHERE (name='Category' AND value = 'Home') 
 SELECT * FROM #final

这是我的第二个查询的解释 第 1 行:我将过滤后的行存储在临时表 #temp 中,该表的 [value] 列中只有数字数据。
第 2 行:再次通过 where name ='Price' 过滤 #temp 表,并通过将 [value] 列转换为 float 来应用范围过滤。然后存储在#final 表中。
第 3 行:将 bundle_metadata 中满足条件 where (name='Category' AND value = 'Home') 的行插入#final 表。 第 4 行:通过选择#final table 获得预期结果

关于mysql - 在同一调用中将列转换为不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620222/

相关文章:

c# - 只读数据库上的索引

sql - 在 SQL 中存储当天的时间

c# - MySql数据库连接与C#同步以查看特定表值

c# - 在 linq 查询中转换泛型类型

c# - 结合 C 和 C#。结构的

c - 如何将十六进制值转换为 WORD、DWORD 或 QWORD 并将结果存储在双变量中?

mysql - Sql 案例与案例 Order by

php - wp_mail() + Ajax + ValidationEngine + $wpdb->插入

MySQL 数据透视表动态行

sql - 在一次查询中使用 DAY()、WEEK() 和 YEAR()