Как выбрать число, которое в формате строки - PullRequest
0 голосов
/ 29 января 2011

У меня есть таблица, в которой есть столбец, который может иметь значения, такие как

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 ИЛИ 0025 ИЛИ 250

Я пытался использовать оператор Like, например: WHERE FileNumber Like «% 25%» также пробовал WHERE FileNumber Like «25%» недай мне желаемый результат Любая помощь будет принята с благодарностью

Ответы [ 5 ]

4 голосов
/ 29 января 2011

Исходя из примеров данных, я предполагаю, что числа, которые вам нужно получить, являются целыми числами. Таким образом, вы можете привести их к целым числам, если они числовые, используя что-то вроде этого:

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

Вы можете использовать это в производной таблице / встроенном представлении для сравнения. Возможно, вы могли бы добавить вычисляемый столбец , используя логику к таблице.

1 голос
/ 29 января 2011

Вы хотите что-нибудь, что

  • соответствует точно (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')
0 голосов
/ 29 января 2011

Если безопасно исправить данные ... сделайте это.

Попробуйте что-то вроде этого

обновление установить filename = cast (имя файла как int) где имя файла, например, «% [1-9]%» - содержит число и имя файла как '% [^ a-z]%' - не содержит буквы

0 голосов
/ 29 января 2011

Используйте это, чтобы получить все строки таблицы, значения которых точно соответствуют значениям, разделенным запятыми.

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

Он выберет все строки, содержащие номер файла, как 25 или 0025 или xyz.

0 голосов
/ 29 января 2011

Как насчет этого?

ВЫБРАТЬ * ИЗ [ИМЯ ТАБЛИЦЫ] ГДЕ ФИЛЕНМЕР НРАВИТСЯ '% 25'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...