现在我正在使用一个遗留数据库,其中一列(外键)是一个 nVarChar,它由例如 '23 +abcde' 形式的单元格组成,其中 '23' 是实际键,其余的是某种属性( ?)。
所以我需要的是这样的:
SELECT * FROM table WHERE bad_column = 23;
将 '23 +abc' 转换为 23 的最佳方法是什么?
现在我正在使用一个遗留数据库,其中一列(外键)是一个 nVarChar,它由例如 '23 +abcde' 形式的单元格组成,其中 '23' 是实际键,其余的是某种属性( ?)。
所以我需要的是这样的:
SELECT * FROM table WHERE bad_column = 23;
将 '23 +abc' 转换为 23 的最佳方法是什么?
试试这个
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
试试这个——
SELECT *
FROM table
WHERE CAST(SUBSTRING(bad_column, 1, CHARINDEX('+', bad_column)) AS INT) = 23;
要选择那种数据,你需要类似的东西
SELECT *
FROM table
WHERE bad_column LIKE '23%';
这不是强制转换,而是转换。
SELECT substring (bad_column, 1, patindex(' ', bad_column))
FROM table
WHERE bad_column LIKE '23%';
试试这个,<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
规范。