May
24
2018
Problem: WHERE X = ako je dostupno A selektiraj A, a ako nije selektiraj B ako je B dostupno, a ako nije ni B dostupno selektiraj C…
SELECT * FROM tbl_test WHERE tbl_test.lang = (
COALESCE(
(SELECT TOP 1 lang FROM tbl_test2 WHERE lang='mk' ),
(SELECT TOP 1 lang FROM tbl_test2 WHERE lang='en'),
'hr'
)
No što ako želimo selektirati ovako: ako je dostupno A selektiraj A, a ako nije selektiraj B ako je B dostupno, a ako nije ni B dostupno selektiraj C ali ne u WHERE uvjetu nego u samom selectu:
SELECT
COALESCE(TBL1.partner_id,TBL2.partner_id) as partner_id,
COALESCE(TBL1.event_title,TBL2.event_title) as event_name,
COALESCE(TBL1.lang,TBL2.lang) as lang
FROM
(SELECT partner_id, lang, event_title FROM tbl_a WHERE tbl_a.lang = 'HR') AS TBL1
FULL OUTER JOIN
(SELECT tbl_a.partner_id,tbl_a.lang,tbl_a.event_title FROM tbl_a WHERE tbl_a.lang = 'EN') AS TBL2
ON TBL1.partner_id = TBL2.partner_id
no comments | posted in MSSQL Database Development
Apr
5
2018
Problem: u bazi je datum u polju varchar u obliku yyyy-mm-dd i zanima nas sve gdje je taj datum između danas i za 30 dana
Rješenje: varchar castati kao date. Ali i getdate() castati kao date jer getdate() vraća datetime
SELECT * FROM tablica
WHERE DatumVarchar is not null
AND CAST(DatumVarchar as date) >= DATEADD(d, 0, DATEDIFF(d, 0, CAST(GETDATE() as date)))
AND CAST(DatumVarchar as date) <= DATEADD(d, 30, DATEDIFF(d, 0, CAST(GETDATE() as date)))
no comments | posted in MSSQL Database Development
Mar
5
2018
Problem: Poredati rezultate SQL upita po nekom svojem poretku koji nema veze sa samim rezultatima sql upita.
Rješenje:
SELECT tbl_test.*
FROM tbl_test
INNER JOIN(
VALUES
(1,1),
(3,2),
(2,3),
(4,4)
) AS dtbl_list (id, ordering) on tbl_test.id = dtbl_list.id
ORDER by dtbl_list.ordering
Source: https://stackoverflow.com/questions/866465/order-by-the-in-value-list
no comments | posted in MSSQL Database Development
Jun
29
2017
Problem: Potrebno je izvršiti aggregate funkciju na bit polje zbog grupiranja, a da se pritom ne grupira po bit polju
Rješenje:
Potrebno je pretvoriti bit u integer na kojeg onda možemo primijeniti aggregate funkciju
min(CAST(prikaz AS int)) AS prikaz
no comments | posted in MSSQL Database Development
Jun
28
2017
Problem: Sljedeći upit daje nam lijepo formatirani datum dd.mm.yyyy kada se kao datum koristi GETDATE() funkcija
SELECT CONVERT(VARCHAR(10),GETDATE(), 104) as datum
Rezultat: 28.06.2017
Također, sljedeći upit daje nam lijepo formatirani datum dd.mm.yyyy kada se kao datum koristi datetime polje iz baze
SELECT CONVERT(VARCHAR(10),datum_novosti, 104) as datum
Rezultat: 28.06.2017
Međutim, iako je datum u bazi zapisan kao yyyy-mm-dd, sljedeći upit ne daje nam traženi format
SELECT CONVERT(VARCHAR(10),'2017-06-05', 104) as datum
Rezultat: 2017-06-05
Rješenje: Pretvoriti string u datum:
SELECT CONVERT(VARCHAR(10),cast('2017-06-05' as date), 104) as datum
Rezultat: 28.06.2017
no comments | posted in MSSQL Database Development
Dec
5
2016
Problem: zanima nas usporedba dva datuma na bazi mjeseca i godine pri čemu nas ne zanima dan i vrijeme:
Rješenje:
SELECT
DATEADD(MONTH, DATEDIFF(MONTH, 0, datum), 0) AS samo_mjesec_godina
FROM
tbl_datumi
Rezultat je svođenje svih datuma na mjesec i godinu pri čemu i dalje imamo datume u igri ali su svi prvog u mjesecu i vrijeme je 00:00:00
2016-12-01 00:00:00
no comments | posted in MSSQL Database Development
Aug
10
2016
Problem :
imamo 10 apartmana , za svaki apartman imamo po 5 slika… potrebno je selektirati po jednu random sliku za svaki od apartmana. S obzirom da group by traži agregatnu funkciju kod selekcije, korištenje Min(image_url) kod selecta će uvijek vraćati istu sliku, onu koja je Min.
Rješenje:
select
MIN(A.id) AS slika_id,
A.obj_id,
dtbl.image_url
from
tbl_slike A
cross apply
(select TOP 1 image_url, obj_id
from tbl_slike B
WHERE B.obj_id = A.obj_id
order by newid()
) dtbl
group by A.obj_id, dtbl.image_url
no comments | posted in MSSQL Database Development
Oct
21
2015
Problem: zanima nas količina karaktera unutar ntext polja. npr gdje je broj karaktera manji od 5000
Rješenje:
SELECT * FROM tbl_tablica WHERE DataLength(sadrzaj)<5000
no comments | posted in MSSQL Database Development
Oct
21
2015
Problem – treba napraviti replace na polju koje je ntext. Sa nvarchar nema problema i to bi bilo replace(polje,’A',’B') gdje bi svaki A bio zamijenjen sa B. Ovo, međutim ne igra ako je polje tipa ntext.
Rješenje – pretvoriti ntext u nvarchar. Jedini je problem ako je količina podataka veća od maksimalne zapremine nvarchar tipa.
CAST(REPLACE(CAST(polje as NVarchar(MAX)),'A','B') AS NText)
no comments | posted in MSSQL Database Development
Mar
15
2015
Problem: Updejtati polje X tablice A vrijednošću polja Y tablice B tamo gdje je podatak W tablice A jednak podatku Z tablice B
Rješenje:
UPDATE tbl_A
SET tbl_A.w = tbl_B.z
FROM tbl_A
INNER JOIN tbl_B ON tbl_A.x = tbl_B.y
MySQL verzija: MySQL – UPDATE INNER JOIN
no comments | posted in MSSQL Database Development