Получить цифры после / в хранимой процедуре - PullRequest
0 голосов
/ 27 августа 2009

У меня есть поле в таблице. Предположим, его значение равно 2009 / 1234. Я хочу получить цифры перед '/'. Я хочу сделать это в хранимой процедуре в sql. Может кто-нибудь помочь?

Ответы [ 4 ]

2 голосов
/ 27 августа 2009

Способ right (на мой взгляд, конечно, поскольку «right» - субъективный термин) состоит в том, чтобы изменить схему так, чтобы эти значения были разделены.

Другими словами, 2009 и 1234 были бы в разных столбцах.

Практически всегда плохая идея с точки зрения скорости и масштабируемости - использовать функции для каждой строки в ваших операторах выбора. Это связано с тем, что СУБД должна выполнять вычисления для каждой отдельной строки, которую она извлекает, каждые раз, когда она ее извлекает.

Если вам необходимо сохранить их как один столбец, я использовал один прием в прошлом - использовать триггер вставки / обновления с двумя дополнительными столбцами для получения частей, поэтому у вас будет:

SomeFields       |   Data    | PostSlash
-----------------+-----------+----------
blah, blah, blah | 2009/1234 | 1234

Да, я знаю, что это не идеальный 3NF, но вполне допустимо сломать это по соображениям производительности, если вы все сделаете правильно. Триггеры гарантируют, что столбцы всегда совпадают, и вы обнаружите, что ваши запросы выполняются намного быстрее при минимальных затратах на триггер и дублирование данных.

Но лучше делать это разделение один раз, когда строка создается или обновляется, а не каждый раз, когда вы ее читаете. Это потому, что базы данных обычно читаются гораздо чаще, чем пишутся. Расход триггера амортизируется по всем вариантам выбора.

Имейте в виду, что если ваша таблица небольшая или (по какой-то странной причине) пишется чаще, чем читается, вам лучше использовать функции для каждой строки.

2 голосов
/ 27 августа 2009

Если вы можете гарантировать косая черта и цифры будут существовать:

 SELECT SUBSTRING(myfield, CHARINDEX('/', myfield)+1, 1000) FROM mytable;
1 голос
/ 27 августа 2009

Чтобы получить цифры перед косой чертой, при условии, что косая черта всегда существует:

SELECT LEFT(columnname, CHARINDEX('/', columnname, 1) - 1) FROM aTable
1 голос
/ 27 августа 2009

SUBSTRING (MyValue, CHARINDEX ('/', MyValue) + 1, 8000)

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