Jak wyciąć cyfry z końca napisu (SQL)?

2012-04-01

Załóżmy, że masz tabelę:

CREATE TABLE test (string VARCHAR(50))
INSERT INTO test VALUES
(’S-123′),
(’SKOK-12#34′),
(’ABC?CDE/12/EG/19871′)

Zauważ, że każdy z napisów kończy się jakąś liczbą. Jak wyciąć liczbę z napisu w tym przypadku? Przydatna będzie funkcja PATINDEX. Funkcja ta potrafi znaleźć wystąpienie określonego wzorca w napisie. Tylko czym miałby być u nas ten napis. Wycięcie z końca napisu liczby polega na znalezieniu pierwszego znaku, który liczbą nie jest patrząc od końca. Maska, która określa znak nie będący liczbą wygląda tak: '%[^0-9]%’ natomiast obrót napisu tak, by analizę wykonać od końca zapewni funkcja REVERSE: Czytaj dalej »

By Rafał Kraik in SQL

Co jest warty certyfikat? Jak rozpocząć certyfikację z SQL 2012?

2012-03-31

Kiedy przystępujesz do programu certyfikacyjnego, masz w tym jakiś cel. Wierzę, że tym celem nie jest jedynie udekorowanie ścian fajnymi dyplomami. Dyplom dostaniesz już po szkoleniu, zaś wejście na ścieżkę certyfikacyjną to zaliczanie kolejnych egzaminów.

Przyjrzyjmy się kilku liczbom:

  • Co roku na świecie przybywa około 59% procent danych w porównaniu do poprzedniego roku (Gartner)
  • Z tego 15% jest zapisywane w postaci tabel
  • W ciągu najbliższych dziesięciu lat będzie 44 razy więcej danych niż obecnie
  • W tym samym czasie ilość osób zajmujących się tymi danymi 1,4 raza

Wniosek? Będziemy mieć więcej pracy. Czytaj dalej »

Porównanie wersji/edycji SQL Server 2012

2012-03-23

Na stronie http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx znajduje się prosta tabelka przedstawiająca możliwości i ograniczenia poszczególnych wersji SQL Server 2008.

Strona zawiera też opisy prezentowanych funkcjonalności.

By Rafał Kraik in SQL, SQL 2012

Być zawsze na czas. Technologia, wiedza i ludzie.

2012-03-16

Znam pewną fabrykę, która jak to duża fabryka, nie przyjmowała małych zleceń, tylko same duże. Wiadomo – duże zlecenie, duże pieniądze. Aby zaś zrealizować małe zlecenie pracownicy musieli odpowiednio przygotować do tego maszyny, wymienić materiał, co generowało mniejsze dochody. Najgorsze przy przyjmowaniu małych zleceń było to, że kiedy fabryka zdecydowała się je realizować, a właśnie pojawiło się duże opłacalne zadanie, wykonanie dużego zlecenia nie było możliwe, bo maszyny były zajęte.

Długo więc bardziej opłacało się aby nie wszystkie maszyny na hali pracowały i nie wszyscy opłaceni pracownicy rzeczywiście pracowali. Aż pewnego razu, ktoś w fabryce postanowił wdrożyć system zarządzania produkcją. Koszt był niemały, oprogramowanie trzeba było stworzyć na zamówienie, kupić sprzęt komputerowy, zadbać o sieć na terenie fabryki i przeszkolić z używania programu wszystkich pracowników. Czytaj dalej »

Klauzula OFFSET i FETCH w SQL 2012

2012-03-14

Od wersji SQL 2012 ORDER BY zostało powiększone o klauzulę OFFSET. Pozwala ono stronicować dane sortowane w okręlsonym porządku. Zobacz następujący przykład:

USE TEMPDB
 
CREATE TABLE TestNumber (ID INT)
 
DECLARE @i INT=0
WHILE @i<100
BEGIN
 SET @i+=1
 INSERT TestNumber VALUES (@i)
END
 
SELECT ID FROM TestNumber
ORDER BY ID
OFFSET 50  ROWS  FETCH NEXT 10 ROWS ONLY
 

W testowej tabelce jest 100 rekordów (liczby ID od 1 do 100). SELECT wyświetli tylko rekordy od 51 do 60:

  • OFFSET mówi, że 50 pierwszych rekordów należy pominąć
  • FETCH mówi ile tych rekordów należy pobrać.

Element FETCH można pominąć.

By Rafał Kraik in SQL, SQL 2012

Limit 8060 B na rekord pominiety od SQL 2005.

2012-03-14

Kiedy w SQL 200o tworzyłbyś taką tabelę:

CREATE TABLE LargeTable(
x varchar(8000),
y varchar(8000)
)

otrzymałbyś ostrzeżenie:

Warning: The table 'LargeTable’ has been created but its maximum row size (16025) exceeds the maximum number of bytes per row (8060). INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes.

Rzeczywiście serwer mógł przechowywać wyłącznie rekordy o maksymalnym rozmiarze 8060B, jeśli zaś trzeba było używać dużych typów należało korzystać z typu text. Czytaj dalej »

By Rafał Kraik in Błedy, SQL

Kiedy defragmentować indeks? (DBCC REORGANIZE i DBCC REBUILD)

2012-03-14

Kiedy defragmentować indeks, to jedno z najczęstszych pytań na szkoleniach.

Tutaj nie tłumaczę, jak jest zbudowany indeks, ani na czym polega defragmentacja. Nie wyjaśnię nawet składni polecenia DBCC REORGANIZE ani DBCC REBUILD. Powtórzę jednak za blogiem Paula Randal wartości przy których należy uruchomić odpowiednie polecenia.

Przyznam, że szczera odpowiedź na pytanie „Kiedy mam uruchomić REBUILD, a kiedy REORGANIZE, a kiedy zupełnie się tym nie przejmować” brzmi to zależy od:

  • rodzaju bazy danych i tego jak użytkownicy wykorzystują tę bazę danych (OLTP/OLAP)
  • rodzaju zastosowanych technologii wysokiej dostępności (high aviability)
  • parametrów serwera (wielkość dysku, ilość pamięci)
  • zapytań wykonywanych przez użytkowników
  • stategii backupu
  • itp. Czytaj dalej »
By Rafał Kraik in SQL