SQL: как, где условие, указывающее букву, за которой следует число, за которым следует что-нибудь еще? - PullRequest
2 голосов
/ 25 июня 2010

Можно ли написать условие WHERE в MS SQL Server, которое будет захватывать строки, которые:

  • начинается с указанной буквы
  • тогда есть десятичная дробь
  • тогда что-нибудь еще

У меня в основном есть таблица, которая содержит почтовые индексы, и я хочу, чтобы все почтовые индексы, принадлежащие Бирмингему - B, сопровождались числом. Там есть несколько почтовых индексов, которые начинаются с буквы B, а затем еще одна буква, которая не принадлежит Бирмингему, поэтому я не могу просто использовать LIKE 'B%'.

Спасибо!

Ответы [ 5 ]

8 голосов
/ 25 июня 2010

Используйте LIKE 'B [0-9]%'.«[0-9]» указывает на любой символ в диапазоне «0» - «9».

Также имейте в виду, что (a) кто-то напечатает «O» вместо «0»."в некоторых случаях, и что могут быть некоторые международные почтовые индексы, которые также начинаются с B и числа, поэтому, если у вас есть надежное поле для страны, вам также следует это проверить :) Да, я много работаю с почтовыми индексами)

2 голосов
/ 25 июня 2010

Согласно статье в Википедии о почтовом индексе B :

  • B39 недействителен
  • B95 - Хенли-ин-Арден,
    Стратфорд-он-Эйвон - вы бы
    считали Хенли-ин-Арден "принадлежащей
    Бирмингему"?(возможно, я действительно не знаю)

Возможно, безопаснее всего расширить коды, которые вы считаете бирмингемскими:

postcode LIKE 'B1 %'
OR postcode LIKE 'B2 %'
OR postcode LIKE 'B3 %'
...
OR postcode LIKE 'B10 %'
OR postcode LIKE 'B11 %'
OR postcode LIKE 'B12 %'
...

Эти префиксы, конечно, можно сохранитьв таблице.

0 голосов
/ 25 июня 2010

В MySQL встроены регулярные выражения (REGEXP / RLIKE). Я думаю, что вы могли бы добавить функциональность к другим, таким как SQL Server.

Это даст вам больше точности, например,

SELECT * FROM PostCodes WHERE PostCode RLIKE '^B[[:digit:]]{1,2}[:space:]'

Это также позволит лучше сопоставить возможные опечатки в условии.

0 голосов
/ 25 июня 2010
SELECT postc FROM postcodes WHERE postc LIKE 'B[0-9]*%';

Что-то в этом роде!

Вы также можете сделать:

SELECT
    postc as ps,UPPER(SUBSTR(ps),1,1) as firstLetter,SUBSTR(ps,2,1) as secondNumber
FROM
    postcodes
WHERE
    firstLetter = 'B' AND secondNumber LIKE '[0-9]%'

Что-то в этом роде.

0 голосов
/ 25 июня 2010

Я думаю, вы можете сделать что-то вроде этого:

Select * From PostCodes
Where PostCode Like 'B[0-9]%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...