将不规则字符串转换为整数

时间:2013-04-17 08:36:38

标签: sql sql-server

现在我正在使用遗留数据库,其中一列(外键)是nVarChar,其由例如以下形式的单元组成。 '23 + abcde'其中'23'是实际键,其余是某种属性(?)。

所以我需要的是这样的东西:

SELECT * FROM table WHERE bad_column = 23;

将'23 + abc'强制转换为23的最佳方式是什么?

4 个答案:

答案 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规范。