SQL Server и дати
13 отговора
452 прегледа
Re: SQL Server и дати
не съм много сигурен но и аз имах такъв проблем със 7.0
я пробвай в regional settings да укажеш формата на датата.
я пробвай в regional settings да укажеш формата на датата.
за кво ти е формат
съхранявай си датата като double стойност, пък после си я форматирай както си искаш
Si Vis Pacem, Para Bellum
Si Vis Pacem, Para Bellum
Re: за кво ти е формат
Пиша приложение на VC++ и ADO и исках следния оператор да върви(не ме питай защо, дълго е за обяснение):
UPDATE TABLE_X SET DAT = '2001-04-24'
В Query Analyzer тръгва едва след като му кажа:
SET DATEFORMAT ymd, но в моята програма нещо няма ефект и тръгва само когато датата е зададена без кавичките. Това ме устройва напълно, но все пак ми е интересно защо в Query Analyzer става, а в моята програма не.
UPDATE TABLE_X SET DAT = '2001-04-24'
В Query Analyzer тръгва едва след като му кажа:
SET DATEFORMAT ymd, но в моята програма нещо няма ефект и тръгва само когато датата е зададена без кавичките. Това ме устройва напълно, но все пак ми е интересно защо в Query Analyzer става, а в моята програма не.
Re: за кво ти е формат
Значи, правиш DAT да е тип double (или както е там в SQL Svr)
Ако ползваш MFC нещата са прости:
COleDateTime now = COleDateTime::GetCurrentTime();
CString sql_str;
sql_str.Format("UPDATE TABLE_X SET DAT = %e", now.m_dt);
Нататък си пускаш sql_str където искаш.
Si Vis Pacem, Para Bellum
Ако ползваш MFC нещата са прости:
COleDateTime now = COleDateTime::GetCurrentTime();
CString sql_str;
sql_str.Format("UPDATE TABLE_X SET DAT = %e", now.m_dt);
Нататък си пускаш sql_str където искаш.
Si Vis Pacem, Para Bellum
Re: за кво ти е формат
SQL не съхранява формата на датата, а представянето й зависи само от настройката на клиента. Не е необходимо да сменяш никакъв формат за клиента (е ако искаш може разбира се) - по добре е да ползваш универсална за SQL нотация във формата yyyymmdd - допустима е за всека CP (SQL 7)
UPDATE XXX set DateStart='20010101' WHERE ClntID=1
UPDATE XXX set DateStart='20010101' WHERE ClntID=1
Re: SQL Server и дати
a det sa vika ima i funkcia convert koito mozhe da ti prestavi datata v datetime v savisimost ot nahcina po koito ia podavash
ето ти тоя update:
UPDATE TABLE_X SET DAT = convert(datetime, '2001-04-24',121)
това, при положение, че DAT е datetime.
разгеле, все пак някой се сети за convert-a :)
абе МиГ, ти, доколкото чета форума, пишеш главно на Ц - и да предлагаш толкова анти-Ц решения ;) - и в sql-a си е хубаво да има стрикт тъпе чекинг, нищо че се налага сам да си го прави човек. специално за датите - ВИНАГИ е добре да се каства, като се стигне до стрингове, щото, колкото и да има стандарти, всеки възприема некви творчески подходи и после иди разбери за кво иде реч и що вместо 20000 записа, излизат 17...
нещо много се разписах - тоя, последния тайнствен параметър в convert-a е описан в MSDN-a - topic-a се зове "Cast and Convert", в раздел "Transact SQL Reference". аз лично го намерих така:
sql server date formats convert 112
горния ред - search на entire collection, излизат към 10-15 топика, там вече е лесно.
това, при положение, че DAT е datetime.
разгеле, все пак някой се сети за convert-a :)
абе МиГ, ти, доколкото чета форума, пишеш главно на Ц - и да предлагаш толкова анти-Ц решения ;) - и в sql-a си е хубаво да има стрикт тъпе чекинг, нищо че се налага сам да си го прави човек. специално за датите - ВИНАГИ е добре да се каства, като се стигне до стрингове, щото, колкото и да има стандарти, всеки възприема некви творчески подходи и после иди разбери за кво иде реч и що вместо 20000 записа, излизат 17...
нещо много се разписах - тоя, последния тайнствен параметър в convert-a е описан в MSDN-a - topic-a се зове "Cast and Convert", в раздел "Transact SQL Reference". аз лично го намерих така:
sql server date formats convert 112
горния ред - search на entire collection, излизат към 10-15 топика, там вече е лесно.
Re: ето ти тоя update:
Напротив, решението си е стандартно. Даже, ако е необходима само датата, без времето, в базата се пъха само мантисата. Значи каквато и да е базата данни (особено ако е на MS), на двоично физическо ниво винаги се пази double тойност - мантисата е датата (брой дни от някакво начало), а експонентата - времето (брой секунди)
значи виж това:
convert(datetime, '2001-04-24',121)
това е функция
т.е. SQL Svr ще трябва да се забавя допълнително, докато я обработи. За това смея да твърдя, че update по моя начин е доста по-бърз от твоя.
Si Vis Pacem, Para Bellum
значи виж това:
convert(datetime, '2001-04-24',121)
това е функция
т.е. SQL Svr ще трябва да се забавя допълнително, докато я обработи. За това смея да твърдя, че update по моя начин е доста по-бърз от твоя.
Si Vis Pacem, Para Bellum
Re: ето ти тоя update:
podhodyt da se pazi datata kato integer (ili double) e umesten kogato chesto se nalagat da se smiata primerno broi dni mejdu dwe dati (izwajdaneto i srawniawaneto na integer-i e obshto wzeto nai-byrzo);
no ako iskame primerno da naprawim sprawka za cenata na marulite prez mesec awgust w poslednite 100 godini - goliamo pisane shte padne zashtoto predwaritelno triabwa da smetnem interwalite na wsichki meseci, a ako polzwame standartnia tip data na server-a - prosto si kazawame where month(d)=8 (na MSSQL beshe DATEPART(MONTH, d ) ako ne se lyja).
ako syrwyra e sredno typ i wytreshno pazi datata kato double (ili 64bitow int)
- interwal ot niakakwo nachalo - toi da mu misli sys extract-waneto na meseca.
ako e umen moje da go pazi i kato interwal ot niakakwo nachalo, i kato day.month.year - no togawa update-to shte stawa po-bawno.
zatowa - pishete si sami SQL-skite server-i momcheta (s uwajenie kym Stefan Canev. :)))
no ako iskame primerno da naprawim sprawka za cenata na marulite prez mesec awgust w poslednite 100 godini - goliamo pisane shte padne zashtoto predwaritelno triabwa da smetnem interwalite na wsichki meseci, a ako polzwame standartnia tip data na server-a - prosto si kazawame where month(d)=8 (na MSSQL beshe DATEPART(MONTH, d ) ako ne se lyja).
ako syrwyra e sredno typ i wytreshno pazi datata kato double (ili 64bitow int)
- interwal ot niakakwo nachalo - toi da mu misli sys extract-waneto na meseca.
ako e umen moje da go pazi i kato interwal ot niakakwo nachalo, i kato day.month.year - no togawa update-to shte stawa po-bawno.
zatowa - pishete si sami SQL-skite server-i momcheta (s uwajenie kym Stefan Canev. :)))
що пък да е писане
Хващаш най-добрия математик от групата да ти напише формулка след което я пускаш на SQL-a :)
Si Vis Pacem, Para Bellum
Si Vis Pacem, Para Bellum
универсална нотация
А сигурно ли е, че е универсална(например опрелена ли е в някакъв ANSI стандарт, кои RDBMS знаеш, че я поддържат и т.н.)
Probvai s {d.....}
Mnogo e kasno sega choveche ama shte se opitam da se setia.........
Imashe neshto s tezi dati za "Maximum compatibility" ili neshto takova
Datite se pishat neshto kato {d yyyy-mm-dd}
Probvai s : UPDATE TABLE_X SET DAT='{d 2001-04-24}'
Ako ima neshto pishi e-mail......

Imashe neshto s tezi dati za "Maximum compatibility" ili neshto takova
Datite se pishat neshto kato {d yyyy-mm-dd}
Probvai s : UPDATE TABLE_X SET DAT='{d 2001-04-24}'
Ako ima neshto pishi e-mail......
Re: ето ти тоя update:
az pak si mislia che ako nabutash nestata v SP ste si normalno barzo
imam v edna tablica 8 mln zapisa koito se obrabotvat vinagi prez SP i performance e dostachno dobar tai kato SQL server si darzhi optimizacia na plana na izpalnenieto /osven ako razbira se ne e kazano da se prekompilira vseki pat/
osven tova hich ne e losha ideiata database stuff da se ostaviat da si gi varshi SQL server-a stoto v kraina smetka toi zatova e napraven
imam v edna tablica 8 mln zapisa koito se obrabotvat vinagi prez SP i performance e dostachno dobar tai kato SQL server si darzhi optimizacia na plana na izpalnenieto /osven ako razbira se ne e kazano da se prekompilira vseki pat/
osven tova hich ne e losha ideiata database stuff da se ostaviat da si gi varshi SQL server-a stoto v kraina smetka toi zatova e napraven