ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
=?ISO-8859-2?Q?Jaros=B3aw_Lubczy=F1ski?= - 08-07-2006 00:13
ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
Witam wszystkich.
Baza danych: MS SQL SERVER 2000 Interfejs: DB-LIBRARY (język C)
Mam problem z formatem danych typu datetime. Kolumny tego typu w zleceniu SELECT sprzedawane są domyślnie w formacie 'MMM dd rrrr', czyli np. 'Jan 3 2005', chciałbym, żeby domyślnym formatem był 'yyyy-mm-dd' ustawiany w ramach bieżącej sesji. W ORACLE robi się to prosto poprzez polecenie:
ALTER SESSION SET NLS_DATE_FORMAT = '...';
A jak w MS SQL? Istnieje tu co prawda instrukcja
SET DATEFORMAT ymd;
Ale działa ona niestety zgodnie z jej opisem w dokumentacji, czyli imho nienajlepiej, tzn. wyłacznie na interpreter poleceń SQL:
<cytat> This setting is used only in the interpretation of character strings as they are converted to date values. It has no effect on the display of date values. </cytat>
OK, ale MSDN nic nie mówi (albo nie udało mi się znaleźć) jak uzyskać podobny efekt przy poleceniu SELECT. Mogę oczywiście użyć funkcji convert:
SELECT CONVERT( char( 10), mydate, 20) FROM ...
i dostać wynik '2005-01-03'
Ale chciałbym też móc zastosować rozwiązanie typu
SELECT * FROM ...
z identycznym rezultatem.
Dziękuję za pomoc.
-- Pozdrawiam Jarek Lubczyński
There are 10 kinds of people: Those who understand binary and those who don't
Grzegorz Danowski - 08-07-2006 00:14
=?iso-8859-2?Q?Re:_ms_sql_server_-_domy=B6lny_format_kolumn_typu_datetime?=
Użytkownik "Jarosław Lubczyński" <eljot123_usun_od_pierwszej_cyfry@elkomtech.com.pl > napisał w wiadomości news:e8l9rj$hcr$1@opal.futuro.pl... > (...) > OK, ale MSDN nic nie mówi (albo nie udało mi się znaleźć) jak uzyskać > podobny efekt przy poleceniu SELECT. Mogę oczywiście użyć funkcji convert: > > SELECT CONVERT( char( 10), mydate, 20) FROM ... > > i dostać wynik '2005-01-03' > > Ale chciałbym też móc zastosować rozwiązanie typu > > SELECT * FROM ... > > z identycznym rezultatem.
Tak z ciekawości po co Ci to? Moim zdaniem takie sprawy (formatowanie wyniku zapytania) powinieneś zostawić aplikacji klienckiej, która pobiera dane surowe przez ADO albo ODBC. G.
=?ISO-8859-2?Q?Jaros=B3aw_Lubczy=F1ski?= - 11-07-2006 00:09
Grzegorz Danowski napisał(a): > Użytkownik "Jarosław Lubczyński" > <eljot123_usun_od_pierwszej_cyfry@elkomtech.com.pl > napisał w wiadomości > news:e8l9rj$hcr$1@opal.futuro.pl... >> (...) >> OK, ale MSDN nic nie mówi (albo nie udało mi się znaleźć) jak uzyskać >> podobny efekt przy poleceniu SELECT. Mogę oczywiście użyć funkcji >> convert: >> >> SELECT CONVERT( char( 10), mydate, 20) FROM ... >> >> i dostać wynik '2005-01-03' >> >> Ale chciałbym też móc zastosować rozwiązanie typu >> >> SELECT * FROM ... >> >> z identycznym rezultatem. > > Tak z ciekawości po co Ci to?
O, powodów są miliony, a dokładniej tak ze cztery :-) :
1. Nie piszę aplikacji dla ms sql tylko portuję na tę bazę aplikację działającą do tej pory na PostgreSQL, Oracle oraz Sybase ASA (windows, linux). Z oczywistych powodów chciałbym zachować jednolitość aplikacji i jak najmniejszą zależność zapytań od rdbms'a - o ile to możliwe.
2. Mamy w arsenale aplikacje, w których zapytania generowane są automagicznie w oparciu o pewien zdefiniowany zestaw wejściowy - tu również wskazana jest jak najmniejsza zależność reguł wejściowych od rdbms'a.
3. Mam własną aplikację typu Interactive SQL (cóś jak oracle worksheet czy sybase isql) używaną do celów projektowo-serwisowych - i chciałbym, żeby w niej odpowiedź na zapytanie typu 'SELECT myDate FROM ...' a nawet 'SELECT * FROM ...' była możliwie taka sama dla różnych rdbms'ów. Udało się do tej pory dla PgSQL'a, Sybase, Oracle, MySql'a i Informixa, powinno się udać nawet dla MS SQL ;-)
4. Wykazuję czysto niezdrową ludzką ciekawość - chcę wiedzieć jak to się robi ;-). A wiem, że można - ms sql query analyser na zapytanie 'SELECT myDate FROM ...' odpowia *dokładnie* tak, jak tego oczekuję, czyli formatem 'YYYY-MM-DD hh:mm:ss.ddd'.
> Moim zdaniem takie sprawy (formatowanie > wyniku zapytania) powinieneś zostawić aplikacji klienckiej, która > pobiera dane surowe przez ADO albo ODBC.
1. ADO czy nawet ODBC odpada z powodów wymienionych wyżej (pkt 1), z konieczności muszę stosować API maksymalnie niskopoziomowe - DB-LIBRARY jest tu (również z pewnych innych względów) jedynym rozwiązaniem, zresztą też dostarcza 'surowych' danych.
2. Poniekąd tak, ale jeżeli mogę mieć 'słuszne' defaulty - to czemu mam z nich nie skorzystać?
> G.
-- Pozdrawiam Jarek Lubczyński
There are 10 kinds of people: Those who understand binary and those who don't
=?ISO-8859-2?Q?Jaros=B3aw_Lubczy=F1ski?= - 19-07-2006 00:44
Grzegorz Danowski napisał(a): > Użytkownik "Jarosław Lubczyński" > <eljot123_usun_od_pierwszej_cyfry@elkomtech.com.pl > napisał w wiadomości > news:e8l9rj$hcr$1@opal.futuro.pl... >> (...) >> OK, ale MSDN nic nie mówi (albo nie udało mi się znaleźć) jak uzyskać >> podobny efekt przy poleceniu SELECT. Mogę oczywiście użyć funkcji >> convert: >> >> SELECT CONVERT( char( 10), mydate, 20) FROM ... >> >> i dostać wynik '2005-01-03' >> >> Ale chciałbym też móc zastosować rozwiązanie typu >> >> SELECT * FROM ... >> >> z identycznym rezultatem. > > Tak z ciekawości po co Ci to? Moim zdaniem takie sprawy (formatowanie > wyniku zapytania) powinieneś zostawić aplikacji klienckiej, która > pobiera dane surowe przez ADO albo ODBC. > G.
Poradziłem sobie - w zasadzie zgodnie z Twoją sugestią. Po prostu nadstawiam bufor typu DBDATETIME, podaję ten typ w funkcji dbcursorbind a domyślną konwersję z typu DBDATETIME do char robię możliwie niskopoziomowo tuż po odczycie wiersza - w ten sposób dostaję to co chciałem i zachowuję jednolitą bibliotekę dostępu do baz sql niezależnie od używanego RDBMS.
Dzięki.
Swoją drogą szkoda, że mssql nie daje możliwości zmiany domyślnego formatu konwersji datetime -> char.
-- Pozdrawiam Jarek Lubczyński
There are 10 kinds of people: Those who understand binary and those who don't
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[oracle] - Oracle SQL Developer - co to jest SID?
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
konkurs SQL Injection - 10 PLN na GSM dla pierwszej osoby, ktora dostanie sie do bazy
Re: Gdzie mozna jeszcze kupic Microsoft SQL 2000 Enterprise Edition??
ustawianie uprawnien uzytkownika SQL 2005 serwer express ORAZ w msde
[sybase] migracja z SQL Aynwhere 9 na ASE 15 Express Edition - dasie?
[msssql, transact-sql] prosze o zapytanie ktore odzwierciedlistrukturę bazy
[SUBIEKT] Katastrofalny błąd - padła baza danych lub serwer SQL
[Oracle][PL/SQL] Chłopaki pomozcie bo juz mi cycki opadajom...
msSQL triger
zanotowane.pldoc.pisz.plpdf.pisz.plczterowers.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|