it-swarm-eu.dev

Jak převést DateTime na VarChar

Pracuji na dotazu v SQL Serveru 2005, kde potřebuji převést hodnotu v proměnné DateTime do proměnné varchar ve formátu yyyy-mm-dd (bez časové části). Jak to udělám?

271
Ali

Se serverem Microsoft Sql:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
241
TonyOssa

Zde je několik testů sql pro všechny styly.

DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style 
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 not valid
order BY style

Zde je výsledek

output                   style
Apr 28 2014  9:31AM          0
04/28/14                     1
14.04.28                     2
28/04/14                     3
28.04.14                     4
28-04-14                     5
28 Apr 14                    6
Apr 28, 14                   7
09:31:28                     8
Apr 28 2014  9:31:28:580AM   9
04-28-14                     10
14/04/28                     11
140428                       12
28 Apr 2014 09:31:28:580     13
09:31:28:580                 14
2014-04-28 09:31:28          20
2014-04-28 09:31:28.580      21
04/28/14  9:31:28 AM         22
2014-04-28                   23
09:31:28                     24
2014-04-28 09:31:28.580      25
Apr 28 2014  9:31AM          100
04/28/2014                   101
2014.04.28                   102
28/04/2014                   103
28.04.2014                   104
28-04-2014                   105
28 Apr 2014                  106
Apr 28, 2014                 107
09:31:28                     108
Apr 28 2014  9:31:28:580AM   109
04-28-2014                   110
2014/04/28                   111
20140428                     112
28 Apr 2014 09:31:28:580     113
09:31:28:580                 114
2014-04-28 09:31:28          120
2014-04-28 09:31:28.580      121
2014-04-28T09:31:28.580      126
2014-04-28T09:31:28.580      127
28 جمادى الثانية 1435  9:31:28:580AM    130
28/06/1435  9:31:28:580AM    131

Nastavte nvarchar(max) kratší na zkrácení času. Například:

select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)

výstupy:

May 18 2018
May 18 2018  9:57AM
338
Colin

Vyzkoušejte následující:

CONVERT(varchar(10), [MyDateTimecolumn], 20)

Pro datum úplného data a nikoli pouze pro datum: 

CONVERT(varchar(23), [MyDateTimecolumn], 121)

Převést styly na tuto stránku:

http://msdn.Microsoft.com/en-us/library/ms187928.aspx
NEBO
Funkce SQL Server CONVERT ()

179
Joel Coehoorn

SQL Server 2012 má novou funkci FORMAT: http://msdn.Microsoft.com/en-us/library/ee634924.aspx

a můžete použít vlastní formát času formátu času: http://msdn.Microsoft.com/en-us/library/ee634398.aspx

Tyto stránky znamenají, že je také k dispozici na SQL2008R2, ale nemám jednu vhodnou k testování, pokud je to tak.

Příklad použití (australský datetime): 

FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
27
Zar Shardan

Buď Cast nebo Convert:

Syntaxe pro CAST:

CAST ( expression AS data_type [ (length ) ])

Syntaxe pro CONVERT:

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

http://msdn.Microsoft.com/en-us/library/ms187928.aspx

Vlastně od doby, kdy jste požádali o určitý formát:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')

Můžete použít DATEPART(DATEPART, VARIABLE). Například:

DECLARE @DAY INT 
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)
8
FCKOE

- Tím získáte čas 0 ve formátu „rrrr-mm-dd 00: 00: 00.000“


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 
5
P's-SQL

Se serverem Microsoft SQL Server:

Použít syntaxi pro CONVERT:

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

Příklad:

SELECT CONVERT(varchar,d.dateValue,1-9)

Více informací naleznete zde: MSDN - Cast and Convert (Transact-SQL) .

4
dmunozpa

Snaž se:

select replace(convert(varchar, getdate(), 111),'/','-');

Více na ms sql tipy

2
Arek Bee

Vyzkoušejte následující:

CONVERT(VARCHAR(10),GetDate(),102)

Pak budete muset nahradit "." s "-".

Zde je stránka, která pomáhá http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

select convert(char(10),@dt,120) 

Mám pevnou délku dat char(10), jak chcete specifický formát řetězce.

2
Andy Jones

Takto to dělám: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Datum můžete převést do mnoha formátů, syntaxe se snadno používá:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Kód je celé číslo, zde 3 je třetí formátování bez století, pokud chcete století jen změnit kód na 103.

Ve vašem případě jsem právě převedl a omezil velikost podle nvarchar (10) takto:

CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15

Více na: http://www.w3schools.com/sql/func_convert.asp

Další řešení (pokud je vaše datum Datetime) je jednoduché CAST:

CAST(MY_DATE_TIME as DATE) => 2016-09-15
1
Ema.H

Vyzkoušejte tento SQL:

select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+ 
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
1
Dilkhush

Uvedený OP datetime formát. Pro mě se časová část dostane do cesty.
Myslím, že je to trochu čistší odstranit časovou část (vrháním datetime na datum) před formátováním.

convert( varchar(10), convert( date, @yourDate ) , 111 )
1
m42

Pro SQL Server 2008+ Můžete použít CONVERT a FORMAT společně.

Například pro časovou značku evropského stylu (např. Německo):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Neřekli jste, která databáze, ale s mysql zde je snadný způsob, jak získat datum z časové razítko (a varchar typ konverze by se mělo stát automaticky):

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16  | 
+-------------+
1 row in set (0.00 sec)
0
Allan Wind

Nejkratší a nejjednodušší způsob je:

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
0
Konstantin
CONVERT(VARCHAR, GETDATE(), 23)
0
Gabriel