现在我正在使用遗留数据库,其中一列(外键)是nVarChar,其由例如以下形式的单元组成。 '23 + abcde'其中'23'是实际键,其余是某种属性(?)。
所以我需要的是这样的东西:
SELECT * FROM table WHERE bad_column = 23;
将'23 + abc'强制转换为23的最佳方式是什么?
答案 0 :(得分:2)
试试这个
SELECT * from table_name
WHERE (CASE WHEN PatIndex('%[0-9]%', bad_column) > 0
THEN CONVERT(INT,LEFT(bad_column,LEN(bad_column)-PatIndex('%[0-9]%',REVERSE(bad_column))+1))
ELSE 0 END) = 23
答案 1 :(得分:1)
试试这个 -
SELECT *
FROM table
WHERE CAST(SUBSTRING(bad_column, 1, CHARINDEX('+', bad_column)) AS INT) = 23;
答案 2 :(得分:0)
要选择那种数据,您需要类似
的内容SELECT *
FROM table
WHERE bad_column LIKE '23%';
这不是演员而是转换。
SELECT substring (bad_column, 1, patindex(' ', bad_column))
FROM table
WHERE bad_column LIKE '23%';
答案 3 :(得分:0)
试试这个,在这种情况下<key>
= 23:
SELECT *
FROM TABLE
WHERE SUBSTRING(bad_column,1,LEN(<key>)) NOT LIKE '[a-zA-Z]'
AND SUBSTRING(bad_column,1,LEN(<key>)) = <key>
这样就不需要强制转换(NOT LIKE
子句避免使用文字,你必须提供其他字符规则),同时你要确保只保留包含你的密钥的列。
修改:您也不需要CHARINDEX
规范。