[ pedja113 @ 25.07.2018. 13:08 ] @
Pozdrav svima,
pocetnik sam u SQL i imam zadatak,ali ne mogu da se snadjem bas najbolje, pa ako moze neka pomoc. Zadatak : "Napisati korisnički definisanu funkciju koja će za zadati datum vratiti redni broj dana u nedelji. Potrebno je predati DDL kod korisnički definisane funkcije."
Hvala unapred
[ bogdan.kecman @ 25.07.2018. 18:11 ] @
taj sto je pravio zadatak nije bas siguran sta oce :( ..


korisnicki definisana funkcija je UDF, pise se u C-u i za nju nema DDL
(osim ako nije mislio na
https://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html kao ddl)

kako mozes da vidis ovde:

https://dev.mysql.com/doc/refman/8.0/en/adding-udf.html

https://dev.mysql.com/doc/refman/5.7/en/adding-udf.html

imas ovde neki jednostavan primer

https://www.codeguru.com/cpp/d...icle.php/c12615/MySQL-UDFs.htm


sa druge strane moze da se napise mysql stored funkcija / procedura i za
to postoji DDL

https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

jednostavan primer:

http://www.mysqltutorial.org/mysql-stored-function/


sta je postavljac pitanja zeleo od tebe (stored funkciju pisanu u SQL-u
ili udf pisan u C-u) ne znam, suljpa smo pojeli a olovo je otrovno
[ pedja113 @ 27.07.2018. 12:04 ] @
Hvala na pomoci, ali ja i dalje ne kapiram kako da odradim ovo.
Evo ga ceo zadatak, ali sam prva dva odradio,samo me tri buni
"2.1. U postojećoj bazi DB_ASSIG1 deklarisati varijable:

var01 = 100 i var 02 = MyVar, korišćenjem naredbe SELECT
var03 = YourVar i var04 = 1, korišćenjem ključne reči SET
var05 = 0 i var06 = TheirVar, tako da budu definisani prilikom deklarisanja

2.2. Napisati naredbu CASE koja će za svaki pojedinačni dan u sedmici moći da vrati naziv dana, a njenim izvršavanjem će biti vraćen naziv dana koji trenutno jeste.

2.3. Napisati korisnički definisanu funkciju koja će za zadati datum vratiti redni broj dana u nedelji. Potrebno je predati DDL kod korisnički definisane funkcije."
[ djoka_l @ 27.07.2018. 12:22 ] @
Drugim rečima, ne znaš na napišeš MySql funkciju?

Evo ti početak, ti napiši ostalo

CREATE FUNCTION

Evo malo tutorijala, kada već nisi uspeo da nađeš google na svom računaru

http://www.mysqltutorial.org/mysql-stored-function/
[ bogdan.kecman @ 27.07.2018. 12:39 ] @
trazi ti da napises stored funkciju, i djoka i ja smo ti dali link sa primerima, dalje od toga jedino da mi napisemo umesto tebe
[ pedja113 @ 27.07.2018. 15:43 ] @
Ne ne,ne zelim da mi vi napisete funkciju, nekako sam se snasao i napisao,ali mi prijavljuje NULL. Ovako izlgeda funkcija, pa ako vam nije problem da mi ukazete na gresku


CREATE FUNCTION [dbo].[WeekDay](@DayOfWeek Varchar(9))

RETURNS INT
AS
BEGIN
DECLARE @iDayofWeek INT
SELECT @iDayofWeek = CASE @DayOfWeek
WHEN 'Monday' THEN 1
WHEN 'Tuesday' THEN 2
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 4
WHEN 'Friday' THEN 5
WHEN 'Saturday' THEN 6
WHEN 'Sunday' THEN 7

END

RETURN (@iDayofWeek)

END;
GO

Hvala vam za sve.
[ djoka_l @ 27.07.2018. 17:27 ] @
Ovo je funkcija pisana za T-SQL (Microsoft SQL Server), a ovaj deo foruma se bavi MySql bazom.

Za koji ulaz ti vraća null.
Osim toga, funkcija ne predstavlja rešenje zadatka. Traži se da se za DATUM vrati dan u nedelji, a ne za string sa imenom dana vrati broj.

Code (sql):

CREATE FUNCTION dbo.DanUNedelji(@MyDate DATE)
RETURNS VARCHAR(20) AS

BEGIN
DECLARE @RESULT VARCHAR(20);

SET @RESULT =
  CASE datepart(dw, @MyDate)
    WHEN 1 THEN 'Nedelja'
    WHEN 2 THEN 'Ponedeljak'
    WHEN 3 THEN 'Utorak'
    WHEN 4 THEN 'Sreda'
    WHEN 5 THEN 'Četvrtak'
    WHEN 6 THEN 'Petak'
    WHEN 7 THEN 'Subota'
  END;
  RETURN( @RESULT );
END;
GO

SELECT dbo.DanUNedelji( getdate() ) dan;
SELECT dbo.DanUNedelji( dateadd(DAY, -1, getdate()) ) dan;


[Ovu poruku je menjao djoka_l dana 27.07.2018. u 18:57 GMT+1]
[ pedja113 @ 27.07.2018. 17:50 ] @
za
SELECT dbo.WeekDay(June 13, 2018');
GO

za ovo mi vraca vrednost NULL
[ djoka_l @ 27.07.2018. 17:59 ] @
Tebi je ulazna varijabla string, i funkcija očekuje neki od stringova Monday..Sunday a ti stavljaš string reprezentaciju datuma.
[ android27 @ 28.07.2018. 00:59 ] @
i ja sam zaopeo na ovom imali neko ovo resenje?? :/
[ android27 @ 28.07.2018. 01:10 ] @
ja sam ovo radio ali nije to to sta zahtjeva

DECLARE @dateFrom datetime
DECLARE @dateTo datetime
DECLARE @DaysBetween int

SET @DaysBetween = 0
SET @dateFrom = '20180727'
SET @dateTo = '20180909'

WHILE @dateTo - 1 >= @dateFrom
BEGIN
SET @dateFrom = @dateFrom + 1
IF DATEPART(dw,@dateFrom) <> 1 --Nedelja
SET @DaysBetween = @DaysBetween + 1

END

SELECT @DaysBetween as BrojDana
[ pedja113 @ 28.07.2018. 21:01 ] @
CREATE FUNCTION [dbo].[WeekDayInt] (@DayOfWeekName VARCHAR(9))
RETURNS INT
AS
BEGIN
DECLARE @DayWeekNumber INT
IF @DayOfWeekName = 'Sunday' SET @DayWeekNumber = 1
IF @DayOfWeekName = 'Monday' SET @DayWeekNumber = 2
IF @DayOfWeekName = 'Tuesday' SET @DayWeekNumber = 3
IF @DayOfWeekName = 'Wednesday' SET @DayWeekNumber = 4
IF @DayOfWeekName = 'Thursday' SET @DayWeekNumber = 5
IF @DayOfWeekName = 'Friday' SET @DayWeekNumber = 6
IF @DayOfWeekName = 'Saturday' SET @DayWeekNumber = 7;
RETURN (@DayWeekNumber)
END

Pokusao sam i sa IF ali mi opet vraca NULL
Ne znam kako da odradim.
[ bogdan.kecman @ 28.07.2018. 21:16 ] @
za pocetak, da li je stvarno u pitanju MySQL ili je u pitanju Microsoft
SQL server?
[ pedja113 @ 29.07.2018. 10:58 ] @
Microsoft SQL server
[ bogdan.kecman @ 29.07.2018. 17:02 ] @
Citat:
pedja113: Microsoft SQL server


ovo je tema specijalizovana za MySQL server (kao sto ti je neko vec napisao mislim),

MySQL -> https://www.mysql.com je mnogo razlicit proizvod od M$SQL servera https://www.microsoft.com/en-us/sql-server (prvi je open source, free, ultra brz i tera 80+% danasnjeg interneta, drugi kosta ko bubreg i levo plucno krilo, proprietary ali sa mnogo vise mogucnosti od prvog i uglavnom se koristi u enterprise svetu ... nisu uopste u klasi za poredjenje)

a pomoc za isti na ES forumu mozes dobiti ovde: http://www.elitesecurity.org/f13-Baze-podataka

ako bi neki admin mogao da prebaci temu tamo bilo bi iskusno da ne bunimo sutra nekoga ko bude trazio neke informacije o MySQL-u
[ Shadowed @ 29.07.2018. 17:59 ] @
Citat:
bogdan.kecman: a pomoc za isti na ES forumu mozes dobiti ovde: http://www.elitesecurity.org/f13-Baze-podataka

Samo mala ispravka: ovde - http://www.elitesecurity.org/f141-MS-SQL
[ bogdan.kecman @ 29.07.2018. 18:29 ] @
ah cool, taj je meni hidden :D jos bolje :)
[ cini123 @ 29.01.2021. 19:03 ] @
Citat:
djoka_l:
Drugim rečima, ne znaš na napišeš MySql funkciju?

Evo ti početak, ti napiši ostalo

CREATE FUNCTION

Evo malo tutorijala, kada već nisi uspeo da nađeš google na svom računaru

http://www.mysqltutorial.org/mysql-stored-function/


Prijatelju da zna napisati nebi ti ni pisao .Nebi ti kruna s glave spala da si napisao par reda koda.
Lako je pričati kad imaš znanje ali pomozi ako ti se traži pomoć a ako nećeš bolje je ćutati
nego likovati.Znanje i ne vrijedi ako nećeš pomoći jer čemu ono služi ako samo ti znaš.
Iako možda neće njemu pomoći ali hoće nekad nekome drugom evo rješenja.


GO
CREATE FUNCTION [dbo].[DaniSedmice](@MyDate DATE)
RETURNS NVARCHAR(50) AS

BEGIN
DECLARE @Rezultat NVARCHAR(50);

SET @Rezultat =
CASE DATENAME(dw, @MyDate)
WHEN 'Monday' THEN 1
WHEN 'Tuesday'THEN 2
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 4
WHEN 'Friday' THEN 5
WHEN 'Saturday' THEN 6
WHEN 'Sunday'THEN 7
END;
RETURN( @Rezultat );
END;
[ cini123 @ 29.01.2021. 19:05 ] @
Citat:
djoka_l:
Ovo je funkcija pisana za T-SQL (Microsoft SQL Server), a ovaj deo foruma se bavi MySql bazom.

Za koji ulaz ti vraća null.
Osim toga, funkcija ne predstavlja rešenje zadatka. Traži se da se za DATUM vrati dan u nedelji, a ne za string sa imenom dana vrati broj.

Code (sql):

CREATE FUNCTION dbo.DanUNedelji(@MyDate DATE)
RETURNS VARCHAR(20) AS

BEGIN
DECLARE @RESULT VARCHAR(20);

SET @RESULT =
  CASE datepart(dw, @MyDate)
    WHEN 1 THEN 'Nedelja'
    WHEN 2 THEN 'Ponedeljak'
    WHEN 3 THEN 'Utorak'
    WHEN 4 THEN 'Sreda'
    WHEN 5 THEN 'Četvrtak'
    WHEN 6 THEN 'Petak'
    WHEN 7 THEN 'Subota'
  END;
  RETURN( @RESULT );
END;
GO

SELECT dbo.DanUNedelji( getdate() ) dan;
SELECT dbo.DanUNedelji( dateadd(DAY, -1, getdate()) ) dan;


[Ovu poruku je menjao djoka_l dana 27.07.2018. u 18:57 GMT+1]


Ako pažljivo čitaš vidjećeš da se ne traži ime dana nego redni broj dana.
[ cini123 @ 29.01.2021. 19:07 ] @
Citat:
pedja113:
Ne ne,ne zelim da mi vi napisete funkciju, nekako sam se snasao i napisao,ali mi prijavljuje NULL. Ovako izlgeda funkcija, pa ako vam nije problem da mi ukazete na gresku


CREATE FUNCTION [dbo].[WeekDay](@DayOfWeek Varchar(9))

RETURNS INT
AS
BEGIN
DECLARE @iDayofWeek INT
SELECT @iDayofWeek = CASE @DayOfWeek
WHEN 'Monday' THEN 1
WHEN 'Tuesday' THEN 2
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 4
WHEN 'Friday' THEN 5
WHEN 'Saturday' THEN 6
WHEN 'Sunday' THEN 7

END

RETURN (@iDayofWeek)

END;
GO

Hvala vam za sve.



GO
CREATE FUNCTION [dbo].[DaniSedmice](@MyDate DATE)
RETURNS NVARCHAR(50) AS

BEGIN
DECLARE @Rezultat NVARCHAR(50);

SET @Rezultat =
CASE DATENAME(dw, @MyDate)
WHEN 'Monday' THEN 1
WHEN 'Tuesday'THEN 2
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 4
WHEN 'Friday' THEN 5
WHEN 'Saturday' THEN 6
WHEN 'Sunday'THEN 7
END;
RETURN( @Rezultat );
END;