Jan 10 2015

MSSQL – CASE WHEN sa više opcija

SELECT CASE

WHEN boja=0 THEN 'plavo'

WHEN boja=1 THEN 'zeleno'

WHEN boja=2 THEN 'crno'

WHEN boja=3 THEN 'bijelo'

ELSE 'nepoznato'

END  

Jan 10 2015

MSSQL – “Conversion failed when converting the nvarchar value”

Problem - “SELECT case when B is null then A else B end” javlja grešku “Conversion failed when converting the nvarchar value” ako je datatype A i B različit

Ako je A broj, a B varchar treba pretvoriti broj u varchar

 

SELECT case when CAST(B AS NVARCHAR(MAX)) is null then A else CAST(B AS NVARCHAR(MAX)) end

 

Sada su A i B nvarchar i može se odraditi CASE WHEN…


Dec 5 2014

MSSQL: date add

Problem: Selektirati sutrašnji datum

Rješenje:

 SELECT DATEADD(dd, 1, GETDATE())

http://stackoverflow.com/questions/167491/sql-server-2005-using-dateadd-to-add-a-day-to-a-date


Sep 20 2014

MSSQL: formatiranje datuma

Problem: kako ispisati različite formate datuma iz dateTime polja?

Datum = 2014-09-14 13:52:24

Samo godina iz datuma:

SELECT YEAR(datum)

= 2014

———————————

Samo mjesec iz datuma:

SELECT MONTH(datum)

= 9

———————————

Samo datum bez preciziranja vremena:

SELECT  DATEADD(dd, 0, DATEDIFF(dd, 0, datum))
SELECT CAST(FLOOR( CAST( datum AS FLOAT ) ) AS DATETIME)

= 2014-09-14 00:00:00

———————————

Samo datum formatiran kao YYYY-MM-DD :

SELECT CONVERT(VARCHAR(10), dateStart, 120)

= 2014-09-14

———————————

Samo datum formatiran kao DD.MM.YYY:

SELECT CONVERT(VARCHAR(10), datum, 104)

= 14.09.2014

———————————

Samo vrijeme:

SELECT CONVERT(VARCHAR(8), datum, 8 )

= 13:52:24

———————————

Dan u tjednu brojčano s time da je 1=nedjelja:

SELECT DATEPART(weekday,datum)

= 1

 

SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6

http://systasis.biz/blog/?p=138

http://systasis.biz/blog/?p=301


May 8 2014

MSSQL – SELECT bit polja koje nije sadržano u GROUP BY

Problem:

Želimo selektirati iz baze vrijednost nekog polja “bit”  (dakle, true/false) upotrebom GROUP BY, ali ne želimo grupirati po njemu.

Rješenje:

Pretvoriti bit u int.

SELECT MIN(CAST(aktivno AS INT)) AS aktivno FROM tbl_tablica GROUP BY id

Apr 11 2014

MSSQL – WHERE ntext = nešto

Problem:

Želimo selektirati iz tablice (ili je updejtati) gdje polje tipa ntext = nešto…

npr:


UPDATE tbl_tablica SET sadrzaj=null WHERE sadrzaj ='abc'

 

 

Ako nam je polje sadrzaj tipa ntext tada nasteje greška: “The data types text and varchar are incompatible in the equal to operator”

Rješenje:

Polje ntext moramo pretvoriti u varchar unutar query-a:


UPDATE tbl_tablica SET sadrzaj=null WHERE CAST(sadrzaj AS nvarchar(max)) ='abc'

 


Apr 5 2014

MSSQL – samo datum iz datetime 2

Problem:

zanima nas samo datum iz datetime polja kako bi ga usporedili sa nekim datumom:

Rješenje:



SELECT * FROM tablica WHERE
CONVERT(VARCHAR(10), mojDatum, 120)<='2014-04-01'

Međutim, ako datum napišemo kao 2014-4-1 ovo neće biti dobro jer se usporedba radi kao varchar, a ne date…
zato možemo:


SELECT * FROM tablica WHERE
DATEADD(dd, 0, DATEDIFF(dd, 0, mojDatum)) <= '2014-4-1'

ovo također igra… drugačiji oblik datuma za usporedbu..


SELECT * FROM tablica WHERE
DATEADD(dd, 0, DATEDIFF(dd, 0, mojDatum)) <= '2014-04-01'

http://systasis.biz/blog/?p=138


Feb 24 2014

MSSQL – ALTER SCHEMA 2

Problem: kako zamijeniti schemu svim objektima u bazi?

Rješenje:

http://stackoverflow.com/questions/17571233/how-to-change-schema-of-all-tables-views-and-stored-procedures-in-mssql

SELECT 'ALTER SCHEMA NewSchemaName TRANSFER ' + SysSchemas.Name + '.' + DbObjects.Name + ';'
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'OldSchemaName'
AND (DbObjects.Type IN ('U', 'P', 'V'))

May 9 2013

MSSQL – selekriranje rezultata od n-tog reda

Problem: u tablici (polja id i naziv) imamo 10 imena… nas zanimaju imena od 6-tog reda nadalje

Pero, Mirko, Ana, Mate, Boris, Zoran, Ivana, Željko, Miro, Ivica

 

Rješenje:


SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,
    ime
  FROM tbl_imena
) AS dtbl_privremena
WHERE rownumber >= 7

rezultat: Ivana, Željko, Miro, Ivica


Mar 30 2013

MSSQL – preklapanje raspona datuma

Problem: Kako saznati da li se dva raspona datuma preklapaju?

raspon1 = 20.02.2013 – 01.03.2013

raspon2 = 15.01.2013 – 22.02.2013

Rješenje:

(Start1 <= End2) AND (Start2 <= End1)

tj.

(20.02.2013<= 22.02.2013) AND (15.01.2013 <= 01.03.2013)

… da li se preklapaju i u početnim i završnim točkama

(Start1 < End2) AND (Start2 < End1)

… da li se preklapaju ne računajući početne i završne točke