Aby uzyskać cyfr po / w procedurze przechowywanej

głosy
0

Mam pole w table.Suppose jego wartość jest 2009 / 1234.I chcą dostać cyfr przed „/”. Chcę zrobić to w procedurze przechowywanej w sql.Can nikogo pomóc?

Utwórz 27/08/2009 o 07:26
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
2

Zakładając, że można zagwarantować ukośnik i będzie istnieć cyfry:

 SELECT SUBSTRING(myfield, CHARINDEX('/', myfield)+1, 1000) FROM mytable;
Odpowiedział 27/08/2009 o 07:30
źródło użytkownik

głosy
1

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

Odpowiedział 27/08/2009 o 07:31
źródło użytkownik

głosy
2

Prawo sposób to zrobić (moim zdaniem oczywiście, ponieważ „prawo” jest subiektywne określenie) byłoby zmodyfikować schemat tak, że wartości te są rozdzielone.

Innymi słowy, 2009 i 1234 będzie w różnych kolumnach.

To prawie zawsze jest to zły pomysł, pod względem szybkości i skalowalności, aby korzystać z funkcji per-wiersz w SELECT. To dlatego, że DBMS musi wykonywać obliczenia na każdym pojedynczym rzędzie to ekstrakty, każdym czasie wyodrębnia go.

Jeśli konieczne, aby utrzymać je w jednej kolumnie, jedna sztuczka Użyłem w przeszłości jest użycie wyzwalacz insert / aktualizacja z dwóch dodatkowych kolumn do otrzymania części, więc trzeba:

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

Tak, wiem, że to nie jest idealne, ale to 3NF całkowicie dopuszczalne złamać, że ze względu na wydajność, jeśli zrobisz to dobrze. Wyzwalacze zagwarantuje kolumny zawsze pasuje i przekonasz się, że Twoje zapytania działać dużo szybciej przy minimalnym kosztem spuście i powielania danych.

Ale to lepiej zrobić to rozłam raz, gdy wiersz jest tworzony lub aktualizowany zamiast za każdym razem ją przeczytać. To dlatego, że bazy danych są zazwyczaj czytać znacznie częściej niż one napisane. Koszty spust jest amortyzowane przez wszystkich wybiera.

Należy pamiętać, że jeśli tabela jest mała lub (z jakiegoś dziwacznego powodu) napisany częściej niż czytać, może być lepiej wyłączyć za pomocą funkcji per-rzędu.

Odpowiedział 27/08/2009 o 07:31
źródło użytkownik

głosy
1

Aby uzyskać cyfry przed kreską, przy założeniu, że ukośnik zawsze istnieje:

SELECT LEFT(columnname, CHARINDEX('/', columnname, 1) - 1) FROM aTable
Odpowiedział 27/08/2009 o 09:29
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more