0

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

所以我需要的是这样的:

SELECT * FROM table WHERE bad_column = 23;

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

4

4 回答 4

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
于 2013-04-17T08:52:12.217 回答
1

试试这个——

SELECT * 
FROM table 
WHERE CAST(SUBSTRING(bad_column, 1, CHARINDEX('+', bad_column)) AS INT) = 23;
于 2013-04-17T08:43:08.380 回答
0

要选择那种数据,你需要类似的东西

SELECT *
FROM table
WHERE bad_column LIKE '23%';

这不是强制转换,而是转换。

SELECT substring (bad_column, 1, patindex(' ', bad_column))
FROM table
WHERE bad_column LIKE '23%';
于 2013-04-17T08:45:05.357 回答
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规范。

于 2013-04-17T09:08:45.390 回答