Feb 12 2014

MySql – jedan oblik datuma u drugi

Problem: u bazi imamo varchar polje napunjeno datumom 15.01.2014 u obliku stringa.

Želimo taj datum selektorati kao MySql date, dakle u obliku 2014-01-15.

Rješenje:

SELECT  STR_TO_DATE(datum,'%d.%m.%Y') as datum FROM tbl_tablica

Nov 26 2013

MySQL – uprosječavanje – update

Problem: Trebamo updejtati polje u tablici sa prosječnom vrijednosti tog polja u toj tablici

 

Rješenje:
UPDATE INNER JOIN tablice sa samom sobom

 UPDATE tbl_tablica AS a
 INNER JOIN (SELECT id_proizvoda, AVG(jedinicna_neto_cijena_nabavna) as prosjek FROM
 tbl_tablica GROUP BY id_proizvoda, sifra) AS b ON a.id_proizvoda = b.id_proizvoda
 SET a.jedinicna_neto_cijena_nabavna = b.prosjek

May 12 2013

MYSQL – IF ELSE u SELECT-u

Problem:

ako je vrijednost polja ‘Ž’ onda ispiši 0, ako je ‘M’ ispiši 1

Rješenje:

SELECT IF(spol='Ž',0,1)as spol

May 10 2013

MySql – jučer, danas, sutra…

Problem:

kako selektirati sadašnje vrijeme na jučerašnji datum i sadašnje vrijeme na sutrašnji datum?

Rješenje:

sada: NOW()

jučer: SELECT DATE_SUB(NOW(), INTERVAL 1 DAY)

(ili SELECT DATE_ADD(NOW(), INTERVAL -1 DAY))

sutra: SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)

(ili SELECT DATE_SUB(NOW(), INTERVAL -1 DAY)


Apr 17 2013

MYSQL – update tablice A vrijednosti polja tablice B

Problem:

tablica A ima polje šifra i naziv
tablica B ima polje šifra i naziv

Treba napraviti update tablice A i zamijeniti naziv za onaj iz tablice B gdje se šifre podudaraju

Rješenje:

UPDATE A SET naziv = (SELECT naziv FROM B WHERE sifra = A.sifra)

Jan 17 2012

MySQL – number difference

Problem:

Zanima nas razlika između dva broja kao pozitivan broj, neovisno koji je od njih mani,a koji veći

x = 2

y = 10

x-y = -8

y-x = 8

Rješenje:

SELECT ABS(x-y) as razlika

Navedeni query daje 8


Jun 30 2011

MySQL – ORDER BY, hrvatski znakovi čćžđš i pogrešna kodna tablica

Problem:

Nekim čudom nam se zalomilo (čitaj nismo se naspavali, nismo popili kavu… ma koga ja lažem, bili smo mladi i neiskusni) da kreiramo website u neki čudnim kombinacijama kodne tablice baze podataka i stranica na kojima se nalaze formulari za upis u bazu… neke perverzne kombinacije windows 1250 i utf-8 ili nešto slično… I dobili smo nešto što kod ispisa na web stranici izgleda kao čćžđšČĆŽĐŠ, ali kad otvorimo bazu vidimo nekakve ž,  Š ili slične điđabaje… I to nam se ne čini neki veliki problem jer se stvar uredno ispisuje kao hrvatski znak. No, problem nastaje kada popis toga nečega (uzmimo da je riječ o prezimenima) pokušamo poredati po abecedi… I taj nesretni Č i Ć nam nikako ne sjedne iza C, a prije D ma što napravili…

Prije nego šro se počnemo igrati nekim globalnim promjenama kolacije, kodne tablice ili sl. dobro je znati da postoji jedan jednostavan sistem kako na brzinu stvar ispisati po abecedi iako smo svjesni da nam rješenje i nije baš najelegantnije.

Rješenje:

SELECT * FROM Persons ORDER BY replace(Prezime,'Č','Cx') ASC

Ovdje smo kod ORDER BY naredbe Č zamijenili sa Cx…
budući da po abecedi Č dolazi iza C ovim načinom početno slovo svih prezimena koja počinju sa Č zamijenjujemo sa C ali mu dodajemo i x kako bi došlo na kraj popisa svih prezimena koja počinju sa C.
…(budući da x po abecedi dolazi iza ž)…
zvuči kompliciranije nego što je… ma zapravo ja neznam objasnit…

Kad bi sve hrvatske znakove željeli odjednom zamijenit na ovakav način to bi izgledalo ovako:

SELECT * FROM Persons ORDER BY
replace(replace(replace(replace(
replace(replace(replace(replace(
replace(replace(Prezime,'č','Cxx')
,'š','Sx'),';ž','Zx'),
'đ','Dx'),'ć','Cx'),'Č'
,'Cxx'),'Š','Sx'),'Ž','Zx')
,'Đ','Dx'),'Ć','Cx')  ASC

Jun 30 2011

MySQL – zamjena praznog stringa s null

Problem:

Vezano uz http://systasis.biz/blog/?p=37 i napomenu o funkciji COALESCE postoji mali problem. Naime, ako u bazi imamo prazan string (”) umjesto null stvar neće raditi jer, kao što rekosmo:

COALESCE traži prvu pojavu vrijednosti koja nije null

A prazan string nije null. Dakle, prvo bi trebalo zamijenit prazan string sa null da bi COALESCE radio kako valja.

Rješenje:

To možemo na sljedeći način:

IF(LENGTH(Prezime)=0,NULL,Prezime)

Dakle, ako je dužina stringa Prezime 0 (nula) tada to znači da je u pitanju prazan string i tada se vrijednost polja Prezime zamijenjuje sa NULL

U toj situaciji COALESCE bi izgledao ovako:

SELECT COALESCE(IF(LENGTH(Prezime)=0,NULL,Prezime),Ime)  FROM Persons

Dakle, selektiraj Prezime iz tablice Persons, a ako je Prezime NULL onda selektiraj Ime umjesto prezimena


Jun 14 2011

Random selekcija i SQL

Problem:

Selektirati podatke iz tablice i poredati ih nasumično.

Rješenje:

MySQL

ako želimo samo jedan podatak ali svaki put neki drugi
SELECT polje FROM tablica ORDER BY RAND() LIMIT 1

ako želimo sve podatke prema nasumičnom poretku

SELECT polje FROM tablica ORDER BY RAND()

MSSQL

ako želimo sve podatke prema nasumičnom poretku
SELECT TOP (100) PERCENT polje FROM tablica ORDER BY NEWID()

ako želimo samo jedan podatak ali svaki put neki drugi

SELECT TOP 1 polje FROM tablica ORDER BY NEWID()

 

 


May 17 2011

MySql: STR_TO_DATE – konverzija datuma iz stringa u date

Problem:

U bazi imamo datum kao string u formatu d.m.YYYY i treba ga pretvoriti u MySql formatirani datum
npr. datum 15.4.2010 treba pretvoriti u 2010-04-15

Rješenje:

SELECT STR_TO_DATE('15.4.2010','%d.%m.%Y') as datum ...

rezultat: 2010-04-15