MSSQL – left, right, len
Problem: Poredati radne naloge po godini i broju ako broj radnog naloga ima sintaksu “broj/godina”
Rješenje: ORDER BY RIGHT(broj_naloga,4) DESC, LEFT(broj_naloga,len(broj_naloga)-5) DESC
Problem: Poredati radne naloge po godini i broju ako broj radnog naloga ima sintaksu “broj/godina”
Rješenje: ORDER BY RIGHT(broj_naloga,4) DESC, LEFT(broj_naloga,len(broj_naloga)-5) DESC
Problem: pretvoriti int u string unutar stored procedure
Rješenje:
DECLARE @broj_narudzbe nvarchar(50) DECLARE @Godina int DECLARE @broj int SELECT @broj_narudzbe = CAST(@broj as varchar(10))+'-'+CAST(@Godina as varchar(10))
Problem:
trebamo saznati koje sve kolone sadrži neka tablica ako znamo samo njeno ime
Rješenje:
SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'mojaTablica'
Na ovaj način dobijemo detaljan izvještaj o tablici, a da bi iz toga izvukli samo popis kolona tada radimo:
SELECT column_name FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'mojaTablica'
Problem: želimo promjeniti schemu nekoj tablici
Rješenje:
ALTER SCHEMA dbo TRANSFER mojaschema.tbl_test
Pri čemu je dbo schema koju želimo dobiti , a mojaschema je ona koju trenutno imamo.
Zanima nas koji je po redu rezultat sa id-jem 17 kad pozovemo query “SELECT mojID, mojNaslov FROM tbl_tablica ORDER BY mojID ASC”
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY mojID ASC) AS rownumber, mojID, mojNaslov FROM tbl_tablica ) AS test WHERE mojID=17
Navedeni query daje koji je po redu rezultat gdje je mojID=17 unutar queryja SELECT mojID, mojNaslov FROM tbl_tablica ORDER BY mojID ASC
Rješenje:
SELECT CASE WHEN mojdatum>getdate() THEN 1 ELSE 0 END as statusDatuma FROM tablica
Problem:
Dijeljenje dvaju polja ako je djelitelj nula (0) daje grešku
SELECT A/B as C from myTable
daje grešku
divide by zero error encountered
ako je B nula
Rješenje:
SELECT ISNULL(A / NULLIF(B, 0), 0) AS C FROM myTable
Ovo B ako je nula pretvara u null. S obzorom da broj dijeljen s null daje null stavljamo ISNULL da bi rezultat bio nula.
Problem:
U bazi imamo dva reda datatype int. Prvi ima vrijednost 10, a drugi vrijednost 15. Kad okinemo query
SELECT AVG(kolicina) as prosjecna_kolicina FROM myTable
dobijemo 12 iako znamo da je prosjek od 10 i 15 zapravo 12,5 tj. (10+15)/2
Rješenje:
SELECT AVG(CAST(kolicina AS DECIMAL(10,2))) AS prosjecna_kolicina FROM myTable
Problem je u datatypeu polja iz kojeg radimo AVG. Ako nam je datatype integer i rezultat će biti integer pa prije izračuna prosjeka trebamo taj integer pretvoriti u decimal.
Problem:
Zanima nas MSSQL funkcija slična MySql funkciji NOW()
Rješenje:
SELECT GETDATE()
Problem:
Spajanje dvaju polja u jedno npr. prilikom SELECTA, dakle MSSQL verzija MySql funkcije CONCAT
http://systasis.biz/blog/?p=45
Rješenje:
SELECT ime + ' ' + prezime as korisnik FROM tbl_osobe