» »

SQL Server in datum nagajata

SQL Server in datum nagajata

carota ::

Pozdravljeni!

Iz internet aplikacije bi rad insertal datum v bazo in ga nato prebral iz nje. Nic lazjega sem si dejal. Tezava je v tem, da ne vem kaksne bodo nastavitve na koncnem serverju (format datuma) in zato mora biti delovanje aplikacije neodvisno od tega. Zato sem se odlocil, da bom insertal datum kot double v polje tipa date, kar v Access-u deluje ne glede na sistemske nastavitve. Tudi v SQLju deluje, vendar z drobno razliko - za danasnji dan (25.8.2004) mi sql stavek vpisuje 38224, ko pogledam v bazo pa pise datum 27.8.2004 in prebere tudi 38226. Kakrsenkoli datum vnesem, mi v bazo vnese vedno za 2 dni vecjega. Resitev, da bi pri vnosu odstel 2, pa se mi ne zdi primerna.

Kako naj insertam datum, da ne bo to vezano ne na nastavitve streznika oz. sql-a?

Aplikacija je v ASP, baza pa SQL 2000.

Hvala za pomoc,
Martin

urkoman ::

Ne vem točno kako boš rešil svoj problem, ampak verjetno obstajajo, tako kot v oraclu funkcije, ki ti pretvorijo datum v pravo obliko, npr.: to_date(sysdate,'dd.mm.yyyy'), kadar insertiras v bazo, uporabljaj nekaj podobnega, ker drugace pride do tezav, ki si jih omenil.
Če ne najdes zgoraj omenjenih funkcij in če še vedno ne deluje, potem zapisuj datum v STRING oz. TEXT obliki, tukaj ne bo prislo do napak.

Lp Urko

carota ::

Cau!

Poizkusil sem vpisati datum v obliki stringa in dela - na mojem sistemu. Ne vem pa kako bo na koncnem serverju, ker se nahaja v drugi drzavi in imajo za datum drugacne nastavitve. Nekje sem nasel da naj bi bil standard za insert datuma 'yyyy-mm-dd' (='2004-08-25') in upam, da bo delovalo. Ne morem pa si privosciti obseznega testiranja, ker rabim 1 dan, da dobim odgovor. Zato tudi iscem najbolj splosen nacin, da bo vedno deloval.

Lp,
Martin

dudi ::

Default format datuma, ki ga razume SQL Server ne glede na nastavitve je YYYYMMDD. Se pravi '20040827'.

Lp!

carota ::

Hvala!

Kaj deluje tudi v accessu ne glede na nastavitve? Imam namrec bazo v accessu in jo bom potem upsize-al v SQL. Bom poizkusil.

Lp,
Martin

destiny ::

Če uporabljaš ASP.NET sploh ne bi smel bit problema, ker če vnašaš vrednost v bazo kot parameter, lahko določiš podatkovni tip parametera na SQL-u (npr. cmd.Parameters.Add("frfr", SqlDbType.DateTime).Value = "moj datum format" , kjer cmd predstavlja sqlcommand object).

Če ne uporabljaš .NET-a, se pa lahko igraš z convert funkcijo v sql-u
Tole je iz Helpa in zajema vse kar rabiš vedet o convert funkciji v navezi s datetime podatkovnim tipom.


Using CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Arguments
expression

Is any valid Microsoft® SQL Server™ expression. For more information, see Expressions.

data_type

Is the target system-supplied data type, including bigint and sql_variant. User-defined data types cannot be used. For more information about available data types, see Data Types.

length

Is an optional parameter of nchar, nvarchar, char, varchar, binary, or varbinary data types.

style

Is the style of date format used to convert datetime or smalldatetime data to character data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types), or the string format when converting float, real, money, or smallmoney data to character data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types).

SQL Server supports the date format in Arabic style, using Kuwaiti algorithm.

In the table, the two columns on the left represent the style values for datetime or smalldatetime conversion to character data. Add 100 to a style value to get a four-place year that includes the century (yyyy).

Without century (yy) With century (yyyy)
Standard
Input/Output**
- 0 or 100 (*) Default mon dd yyyy hh:miAM (or PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 British/French dd/mm/yy
4 104 German dd.mm.yy
5 105 Italian dd-mm-yy
6 106 - dd mon yy
7 107 - Mon dd, yy
8 108 - hh:mm:ss
- 9 or 109 (*) Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM (or PM)
10 110 USA mm-dd-yy
11 111 JAPAN yy/mm/dd
12 112 ISO yymmdd
- 13 or 113 (*) Europe default + milliseconds dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 or 120 (*) ODBC canonical yyyy-mm-dd hh:mi:ss(24h)
- 21 or 121 (*) ODBC canonical (with milliseconds) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(no spaces)
- 130* Kuwaiti dd mon yyyy hh:mi:ss:mmmAM
- 131* Kuwaiti dd/mm/yy hh:mi:ss:mmmAM


* The default values (style 0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).
** Input when converting to datetime; output when converting to character data.
*** Designed for XML use. For conversion from datetime or smalldatetime to character data, the output format is as described in the table. For conversion from float, money, or smallmoney to character data, the output is equivalent to style 2. For conversion from real to character data, the output is equivalent to style 1.



Important By default, SQL Server interprets two-digit years based on a cutoff year of 2049. That is, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950. Many client applications, such as those based on OLE Automation objects, use a cutoff year of 2030. SQL Server provides a configuration option (two digit year cutoff) that changes the cutoff year used by SQL Server and allows the consistent treatment of dates. The safest course, however, is to specify four-digit years.


When you convert to character data from smalldatetime, the styles that include seconds or milliseconds show zeros in these positions. You can truncate unwanted date parts when converting from datetime or smalldatetime values by using an appropriate char or varchar data type length.

zeleznika ::

Alo

Pri MSSql je vpiše datum kot string v obliki 'YYYYMMDD',
pri Accessu se vpiše kot #YYYYMMDD#,
pri MySql se vpiše string 'YYYY-MM-DD'.

lp, A

carota ::

MSSQL mi ne sprejme 'yyyymmdd' pac pa samo 'yyyy-mm-dd' in zgleda da deluje kot mora.

Hvala vsem,
Martin

carota ::

Se eno vprasanje vedno okoli istega datuma. Ce imam v bazi to polje tipa datum, kako bi nasel vse recorde, ki so mlajsi od recimo '2004-08-01'?

Lp,
Martin

dudi ::

select * from tabela where datum < '2004-08-01'

Lp!

Zgodovina sprememb…

  • spremenilo: dudi ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pridobitev podatkov in sortiranje

Oddelek: Programiranje
9888 (709) Spura
»

[PHP]Timestamp in mysql

Oddelek: Programiranje
82304 (1969) 680x0
»

[Java] Evidenca delovnega časa - Java v navezi z Accessom

Oddelek: Programiranje
393219 (2439) c0dehunter
»

[bat datoteke] Trenutni datum in ura

Oddelek: Programiranje
112390 (2147) darkolord
»

SQL CNVERT; konvertanje datuma

Oddelek: Programiranje
141415 (1221) frudi

Več podobnih tem