[sql] type veld voor minuten/uren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Michael -

Michael -

15/04/2014 11:00:53
Quote Anchor link
Allen,

Als je uren of minuten o.i.d. moet opslaan in een database als welk (nummer) type zou jij het dan opslaan?
Je wilt bijvoorbeeld een 40 uur durende werkweek opslaan, is 40 dan een int, float, double, decimal, ..?

Bvd
 
PHP hulp

PHP hulp

17/11/2024 05:38:58
 
Pipo Clown

Pipo Clown

15/04/2014 11:08:45
Quote Anchor link
Hangt een beetje van de nauwkeurigheid af.

Wil je ook halve of kwart uren kunnen registreren dan zeg ik decimal, wil je alleen hele uren opslaan dan zeg ik integer.
 
Bart V B

Bart V B

15/04/2014 11:11:33
Quote Anchor link
Wat dacht je van een DATETIME of DATE veld? Die zijn er immers voor gemaakt.
Daarmee kan je heel nauwkeurig mee rekenen.
 
Dos Moonen

Dos Moonen

15/04/2014 11:35:41
Quote Anchor link
http://stackoverflow.com/questions/4037777/interval-datatype-in-mysql

Mocht je een PostgreSQL database hebben (werkt fijner dan MySQL vind ik) dan is interval het ideale data type: PT40U
http://www.postgresql.org/docs/9.1/static/datatype-datetime.html
 
Michael -

Michael -

15/04/2014 11:41:08
Quote Anchor link
Pipo, dan denk ik eerder integer. of zijn er ook mensen die 32,5 uur per week werken of zo?

Bart, Het gaat hier niet om een datum.

Dos, (Helaas) geen postgre, op die stack link die je post noemen ze time?
Kan (en is het wel goed) als time meer dan 23 uur opslaat? Werkweek van 40 uur wordt dan opgeslagen als 40:00:00.
Gewijzigd op 15/04/2014 11:46:59 door Michael -
 
Dos Moonen

Dos Moonen

15/04/2014 12:01:55
Quote Anchor link
"If the intervals you're concerned with are less than 838 hours"
23 < 838

PS. de shorthand voor PostgreSQL is vreemd genoeg postgres
 
Michael -

Michael -

15/04/2014 12:07:52
Quote Anchor link
Bedankt, dus 838:00:00 is de max. Vreemde keuze maar komt in dit geval wel goed uit dan :)
Ik zal de uren als TIME opslaan.

PS: Thanks ;)

Toevoeging op 15/04/2014 12:12:43:

Heb je daar trouwens een bron van? Geldt die range tot 838 alleen voor MySQL?

Ik zie dat MS Server '12 namelijk range 00:00:00.0000000 tot 23:59:59.9999999 gebruikt.
 
Dos Moonen

Dos Moonen

15/04/2014 12:44:09
Quote Anchor link
"Vreemde keuze maar komt in dit geval wel goed uit dan :)"
Het heeft er waarschijnlijk mee te maken dat het -83x uur tot en met +83x aan kan EN tot 6 cijfers achter de komma.

INTERVAL is een ANSI SQL standaard die (voor zover ik weet) jammer genoeg nog niet in SQL Server of MySQL zit.
Je kunt het altijd in het aantal minuten in een int opslaan. minuten lijkt me klein genoeg, als je het daar niet mee eens bent kun je altijd zelf nog iets kleiner kiezen.

PS. bron: http://dev.mysql.com/doc/refman/5.0/en/time.html
Gewijzigd op 15/04/2014 12:44:50 door Dos Moonen
 
Michael -

Michael -

15/04/2014 13:06:05
Quote Anchor link
Bedankt voor je reactie.

Dus TIME(/INTERVAL) 40:00:00 en niet geschikt voor alle databases
of INT 2400 (40*60)

Ik denk dan toch voor het laatste. Je weet nooit wat voor database er nog is achter komt.
Gewijzigd op 15/04/2014 13:08:56 door Michael -
 
Dos Moonen

Dos Moonen

15/04/2014 13:41:50
Quote Anchor link
LIMIT is ook niet geschrikt voor alle databases.

FETCH FIRST 10 ROWS ONLY is dat wel (SQL:2008) maar MySQL ondersteund dat weer niet (PostgreSQL doet beide, yay!)

Mocht je willen weten hoe verschillende databases het aantal records limiteren:
http://en.wikipedia.org/wiki/Select_%28SQL%29#FETCH_FIRST_clause
 
Michael -

Michael -

15/04/2014 13:57:29
Quote Anchor link
Interessant. LIMIT gebruik ik dan weer wel.
Er zullen altijd wel functies zijn die de één wel en de ander niet kent.
Als ik die lijsten zo zie, schommelt het aardig.
Een uitgebreide set van query's die op alle databases werkt, zal onmogelijk zijn.
 
Dos Moonen

Dos Moonen

15/04/2014 14:20:05
Quote Anchor link
Er bestaan query builders die op basis van de database verbinding de juiste SQL proberen te genereren.
Maar kies een database, en gebruik de unieke functies voor die wanneer nodig, maar probeer wel zo veel mogelijk volgens de ANSI SQL standaard te werken wanneer mogelijk.

Dat betekend bijvoorbeeld double quotes i.p.v. backticks gebruiken.
Voor MySQL betekend dit dat je connectie moet dan wel in de ANSI_QUOTES mode staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
// stel de default modus in, voer uit als super user
SET GLOBAL sql_mode = 'ANSI_QUOTES,andere,opties,als,je,dat,wilt';

// stel de modus voor deze connectie in
SET SESSION sql_mode = 'ANSI_QUOTES,andere,opties,als,je,dat,wilt';


Je zo jezelf leren om correctere SQL te schrijven. MySQL vindt veel goed, maar als je ooit eens met een andere database moet werken kan het heel irritant zijn als je niet weet wat ANSI SQL syntax is en wat MySQL syntax is.
Gewijzigd op 15/04/2014 16:11:05 door Dos Moonen
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/04/2014 16:41:05
Quote Anchor link
Quote:
ANSI-standard SQL specifies that each table name must be a single word comprised of alphanumeric characters and the underscore symbol (_)

Zolang je daar aan houdt heb ook niks van doen met double quotes, square brackets of wat dan ook.
 
Pipo Clown

Pipo Clown

15/04/2014 17:18:48
Quote Anchor link
Michael - op 15/04/2014 11:41:08:
Pipo, dan denk ik eerder integer. of zijn er ook mensen die 32,5 uur per week werken of zo?


Ja natuurlijk zijn deze er.
Wanneer ik de ene week 32,5 uur werk en de volgende week 47,5 uur dan hoor je mijn baas echt niet klagen.
En ik weet zeker dat er heel erg veel bedrijven zijn waar het zo geregeld is.

Overigens, bij veel bedrijven wordt er ook regelmatig over gewerkt waardoor je zo op 43,25 uur in de week kunt komen.
 
Michael -

Michael -

16/04/2014 08:38:06
Quote Anchor link
Dos, bedankt voor je reacties! :) Wat is ANSI en wat doet 't? Wat is het verschil met TRADITIONAL? Wat gebruik ik nu?

Ik zie dat het eenvoudig aan je verbinding kan toevoegen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$pdo
= new PDO(
     $dsn,
     $username,
     $password,
     array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="ANSI,TRADITIONAL"')
);

?>


Ger; Wat bedoel je?

Pipo; Sorry, ja natuurlijk kan dat :) Ik bedoelde meer als ik vast uren contract van 32,5 uur of zo. Maar met opslaan van minuten als INTEGER is dat ook geen probleem.
 
Dos Moonen

Dos Moonen

16/04/2014 09:24:09
Quote Anchor link
American National Standards Institute

Het is de non-profit organisatie die SQL standaardiseert. ANSI SQL is vergelijkbaar met Algemeen Beschaafd Nederlands, MySQL, MsSQL, PostgreSQL etc zijn dan allemaal dialecten.
 
Michael -

Michael -

16/04/2014 09:34:23
Quote Anchor link
Mooi uitgelegd :) En TRADITIONAL is de default waarde en het dialect? De regels zoals MySQL vind dat het moet.
Is de voorbeeld code die ik gaf door ANSI en TRADITIONAL te setten goed? Of heeft dat weinig zin.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/04/2014 09:58:16
Quote Anchor link
http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sqlmode_ansi

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT @@SQL_MODE

om te zien welke modes nu gebruikt worden.

Ik plaatste mijn opmerking op Dos zijn opmerking "double quotes i.p.v. backticks gebruiken"
Als je alleen alfanumierieke karakters en _ in table- en kolomnamen gebruikt én geen gereserveerde woorden, dan hoef je ze niet te omsluiten met wat dan ook.
 
Dos Moonen

Dos Moonen

16/04/2014 10:12:55
Quote Anchor link
Ger van Steenderen op 16/04/2014 09:58:16:
http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sqlmode_ansi

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT @@SQL_MODE

om te zien welke modes nu gebruikt worden.

Ik plaatste mijn opmerking op Dos zijn opmerking "double quotes i.p.v. backticks gebruiken"
Als je alleen alfanumierieke karakters en _ in table- en kolomnamen gebruikt én geen gereserveerde woorden, dan hoef je ze niet te omsluiten met wat dan ook.


Verschillende RDMBs hebben verschillende reserved words.
SQL editors willen nog wel eens "identifier hier" een ander kleurtje geven, syntax coloring vind ik erg fijn.

De databases waar ik van tijd tot tijd mee te maken heb kunnen allemaal ingesteld worden om dubbele quotes volgens de ANSI standaard te behandelen.

Anyway, dit is een beetje het zelfde als een IDE war, we gaan het waarschijnlijk niet eens worden.
 
Michael -

Michael -

16/04/2014 10:17:29
Quote Anchor link
@Dos; Is de voorbeeld code die ik gaf door ANSI en TRADITIONAL te setten goed? Of heeft het weinig zin deze beide te setten.

@Ger; Oke. Backticks gebruik ik sowieso niet en quotes bij tabel namen ook niet.
 
Dos Moonen

Dos Moonen

16/04/2014 11:09:14
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$pdo
= new PDO(
     $dsn,
     $username,
     $password,
     array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET sql_mode='ANSI,TRADITIONAL'")
);

?>

Dat is beter, single quotes zijn voor strings binnen SQL.
Voor de rest ziet het er goed uit.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.