如何选择字符串格式的数字

时间:2011-01-29 05:36:07

标签: sql sql-server tsql

我有一个表格,其列可以包含

之类的值
Id     FileNumber
------------------
1      0025
2      CDE01
3      0035
4      25
5      45
6      250
7      XYZ1
8      2500

现在,如果我想选择具有FileNumber 25的行,我该怎么做呢。我不希望行具有250或2500.搜索应该只获得0025和25.此列的类型为varchar。但是,我应该能够搜索任何值,如XYZ1 OR 0025 OR 250

我尝试使用Like运算符,例如:WHERE FileNumber像'%25%'也试过WHERE FileNumber像'25%'没有给我想要的结果 任何帮助将不胜感激

5 个答案:

答案 0 :(得分:4)

根据示例数据,我假设您需要检索的数字是整数。因此,如果使用类似这样的数字,则可以将它们转换为整数:

CASE WHEN ISNUMERIC(s.col) = 1 THEN CAST(s.col AS INT) END

示例:

WITH sample AS (
  SELECT '0025' AS col
  UNION ALL
  SELECT 'CDE01'
  UNION ALL
  SELECT '0035'
  UNION ALL
  SELECT '25'
  UNION ALL
  SELECT '45'
  UNION ALL
  SELECT '250'
  UNION ALL
  SELECT 'XYZ1'
  UNION ALL
  SELECT '2500')
SELECT CASE WHEN ISNUMERIC(s.col) = 1 THEN CAST(s.col AS INT) END
  FROM sample s

您可以在派生表/内联视图中使用它进行比较。您可以使用逻辑向表中添加computed column

答案 1 :(得分:1)

你想要任何

  • 完全匹配(25)
  • 仅以前导零结束(0025)

此代码通过一些LIKE匹配来实现

WITH sample AS (
  SELECT '0025' AS col
  UNION ALL SELECT 'CDE01'
  UNION ALL SELECT '0035'
  UNION ALL SELECT '25'
  UNION ALL SELECT '45'
  UNION ALL SELECT '250'
  UNION ALL SELECT 'XYZ1'
  UNION ALL SELECT 'XYZ125'
  UNION ALL SELECT '125'
  UNION ALL SELECT '2500')
SELECT
   s.col
FROM
    sample s
WHERE
  col = '25'
  OR
  (REPLACE(col, '25', '00') NOT LIKE '%[^0]%' AND col LIKE '%25')

答案 2 :(得分:0)

这个怎么样?

SELECT * FROM [TABLE NAME] FILENUMBER喜欢'%25'

答案 3 :(得分:0)

请使用此方法从表中获取具有与逗号分隔值完全匹配的值的所有行。

SELECT * FROM TABNAME WHERE FILENUMBER in ('25','0025','xyz')

它将选择包含文件编号为25或0025或xyz的所有行。

答案 4 :(得分:0)

如果可以安全地修复数据......那就行了。

尝试这样的事情

更新 set filename = cast(filename as int) 其中文件名如'%[1-9]%' - 中有一个数字 和'%[^ a-z]%'这样的文件名 - 中没有字母