SQL Server и дати

13 отговора 452 прегледа
#1

SQL Server и дати

Как да променя формата дата на SQLServer 7.0 база?

Отговор
в отговор на WinProgrammer #2

Re: SQL Server и дати

не съм много сигурен но и аз имах такъв проблем със 7.0

я пробвай в regional settings да укажеш формата на датата.

Отговор
в отговор на WinProgrammer #3

за кво ти е формат

съхранявай си датата като double стойност, пък после си я форматирай както си искаш

Si Vis Pacem, Para Bellum
Отговор
в отговор на MиГ-31 #4

Re: за кво ти е формат

Пиша приложение на VC++ и ADO и исках следния оператор да върви(не ме питай защо, дълго е за обяснение):

UPDATE TABLE_X SET DAT = '2001-04-24'

В Query Analyzer тръгва едва след като му кажа:

SET DATEFORMAT ymd, но в моята програма нещо няма ефект и тръгва само когато датата е зададена без кавичките. Това ме устройва напълно, но все пак ми е интересно защо в Query Analyzer става, а в моята програма не.

Отговор
в отговор на WinProgrammer #5

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
Отговор
в отговор на WinProgrammer #6

Re: за кво ти е формат

SQL не съхранява формата на датата, а представянето й зависи само от настройката на клиента. Не е необходимо да сменяш никакъв формат за клиента (е ако искаш може разбира се) - по добре е да ползваш универсална за SQL нотация във формата yyyymmdd - допустима е за всека CP (SQL 7)
UPDATE XXX set DateStart='20010101' WHERE ClntID=1

Отговор
в отговор на WinProgrammer #7

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

Отговор
в отговор на WinProgrammer #8

ето ти тоя 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 топика, там вече е лесно.

Отговор
в отговор на Kpoмид #9

Re: ето ти тоя update:

Напротив, решението си е стандартно. Даже, ако е необходима само датата, без времето, в базата се пъха само мантисата. Значи каквато и да е базата данни (особено ако е на MS), на двоично физическо ниво винаги се пази double тойност - мантисата е датата (брой дни от някакво начало), а експонентата - времето (брой секунди)

значи виж това:
convert(datetime, '2001-04-24',121)
това е функция
т.е. SQL Svr ще трябва да се забавя допълнително, докато я обработи. За това смея да твърдя, че update по моя начин е доста по-бърз от твоя.

Si Vis Pacem, Para Bellum
Отговор
в отговор на MиГ-31 #10

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. :)))

Отговор
в отговор на _ #11

що пък да е писане

Хващаш най-добрия математик от групата да ти напише формулка след което я пускаш на SQL-a :)

Si Vis Pacem, Para Bellum
Отговор
в отговор на Koлera #12

универсална нотация

А сигурно ли е, че е универсална(например опрелена ли е в някакъв ANSI стандарт, кои RDBMS знаеш, че я поддържат и т.н.)

Отговор
в отговор на WinProgrammer #13

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......


Отговор
в отговор на MиГ-31 #14

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

Отговор