Sql Server 2005'te (zaman bölümü olmadan) biçiminde DateTime
bir varchar
değişken değişkeni dönüştürmek gerekiyor bir sorgu üzerinde çalışıyorum yyyy-mm-dd
. Bunu nasıl yaparım?
Sql Server 2005'te (zaman bölümü olmadan) biçiminde DateTime
bir varchar
değişken değişkeni dönüştürmek gerekiyor bir sorgu üzerinde çalışıyorum yyyy-mm-dd
. Bunu nasıl yaparım?
Yanıtlar:
Microsoft Sql Server ile:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
Bunun yerine kullanmak için herhangi bir neden var mı CONVERT(CHAR(10), ...)
? Ayrıca 2005'ten daha yeni SQL Server sürümleriyle (!) Çalışanlar, Zar Shardan'ınFORMAT(date_value, format_string)
işleve dayalı bir çözüm önerdiği cevabını kontrol etmelidir .
FORMAT()
is very slow relativeconvert(char(10),...)
İşte tüm stiller için bazı test sql.
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
İşte sonuç
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
nvarchar(max)
Zamanı kısaltmak için daha kısa yapın . Örneğin:
select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)
çıktılar:
May 18 2018
May 18 2018 9:57AM
dd-mm
veya jun - 28
. Herhangi bir seçenek var mı ??
Takip etmeyi dene:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Tam tarih için değil, yalnızca tarih için:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Dönüştürme stilleri için bu sayfaya bakın:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
VEYA
SQL Server CONVERT () İşlevi
SQL Server 2012'nin yeni bir işlevi vardır: FORMAT: http://msdn.microsoft.com/en-us/library/ee634924.aspx
ve özel tarih saat biçimi dizelerini kullanabilirsiniz: http://msdn.microsoft.com/en-us/library/ee634398.aspx
Bu sayfalar SQL2008R2'de de mevcut olduğunu ima ediyor, ancak durumun bu olup olmadığını test etmek için kullanışlı bir tane yok.
Örnek kullanım (Avustralya datetime):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Ya Cast
ya Convert
:
Sözdizimi CAST
:
CAST ( expression AS data_type [ (length ) ])
Sözdizimi CONVERT
:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
http://msdn.microsoft.com/en-us/library/ms187928.aspx
Aslında belirli bir formatı sorduğunuzdan beri:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Microsoft SQL Server ile:
CONVERT için Sözdizimi kullanın:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Misal:
SELECT CONVERT(varchar,d.dateValue,1-9)
Stil için burada daha fazla bilgi bulabilirsiniz: MSDN - Cast and Convert (Transact-SQL) .
Deneyin:
select replace(convert(varchar, getdate(), 111),'/','-');
MS SQL ipuçları hakkında daha fazla bilgi
Takip etmeyi dene:
CONVERT(VARCHAR(10),GetDate(),102)
O zaman "." ile "-".
İşte http://www.mssqltips.com/tip.asp?tip=1145 yardımcı olan bir site
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
char(10)
Belirli bir dize biçimi istediğiniz gibi sabit veri uzunluğu var .
Tarihinizi birçok formatta dönüştürebilirsiniz, sözdiziminin kullanımı basittir:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
Senin durumunda , ben sadece dönüştürdüm ve nvarchar (10) ile boyutu kısıtlamak gibi:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
Daha fazla bilgi için: http://www.w3schools.com/sql/func_convert.asp
Başka bir çözüm (tarihiniz bir Tarihse) basit bir CAST'dir :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
SQL Server 2008+ için CONVERT ve FORMAT öğelerini birlikte kullanabilirsiniz.
Örneğin, Avrupa tarzı (örneğin Almanya) zaman damgası için:
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
Hangi veritabanını söylemediniz, ancak burada mysql ile bir zaman damgasından bir tarih almanın kolay bir yoludur (ve varchar türü dönüşümü otomatik olarak gerçekleşmelidir):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
En kısa ve en basit yol:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
05/05/2020 10:41:05 AM
sonuç olarak verecek
Hangi dili söylemiyorsunuz ama C#/.NET
yerel bir DateTime
veri türü olduğu için varsayıyorum . Bu durumda, ToString
yöntemi kullanarak dönüştürün ve aşağıdaki gibi bir biçim belirteci kullanın:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Ancak, bu bir veritabanı sorgusunda veya SQL deyimi içine bitmiş kullanarak karşı uyarı. Veritabanları için belirli bir biçimlendirme dizesi kullanılmalıdır. Eğer zaman bölümünü sıfırlamak ve DateTime bir SQL parametresi olarak yerine getirmek için çalışıyoruz kullanıyorsanız daha iyi.
CONVERT
, MSDN belgelerine bakın .