Bagaimana mengkonversi VarChar VarChar VarChar VarChar DateTime untuk

Saya bekerja pada sebuah query di Sql Server 2005 di mana saya perlu untuk mengkonversi nilai dalam DateTime variabel menjadi varchar variabel yyyy-mm-dd format (tanpa waktu paruh). Bagaimana saya melakukan itu?

Mengomentari pertanyaan (2)

Berikut ini's beberapa tes sql untuk semua gaya.

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

Berikut ini's hasilnya

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

Membuat nvarchar(max) yang lebih pendek untuk memangkas waktu. Misalnya:

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

output:

May 18 2018
May 18 2018  9:57AM
Komentar (6)
Larutan

Dengan Microsoft Sql Server:

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

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
Komentar (4)

Coba yang berikut ini:

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

Untuk tanggal penuh waktu dan tidak hanya saat melakukan:

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

Lihat halaman ini untuk mengubah gaya:

http://msdn.microsoft.com/en-us/library/ms187928.aspx ATAU SQL Server CONVERT() Fungsi

Komentar (0)

SQL Server 2012 memiliki fungsi baru , FORMAT: http://msdn.microsoft.com/en-us/library/ee634924.aspx

dan anda dapat menggunakan kustom tanggal, waktu format string: http://msdn.microsoft.com/en-us/library/ee634398.aspx

Halaman ini menyiratkan hal ini juga tersedia di SQL2008R2, tapi aku don't memiliki satu berguna untuk menguji apakah yang's terjadi.

Contoh penggunaan (Australia datetime):

FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Komentar (0)

Anda dapat menggunakan DATEPART(DATEPART, VARIABEL). Misalnya:

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)
Komentar (0)

Salah satu Pemain atau Convert:

Sintaks untuk CAST:

CAST ( expression AS data_type [ (length ) ])

Sintaks untuk MENGUBAH:

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

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

Sebenarnya sejak anda meminta format tertentu:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Komentar (0)
  • Ini memberi anda waktu 0 dalam format 'yyyy-mm-dd 00:00:00.000'
    
    PILIH CAST( CONVERT(VARCHAR, GETDATE(), 101) SEBAGAI DATETIME) ; 
    
Komentar (0)

Dengan Microsoft SQL Server:

Menggunakan Sintaks untuk MENGKONVERSI:

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

Contoh:

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

Untuk gaya yang anda dapat menemukan info lebih lanjut di sini: MSDN - Cast dan Mengkonversi (Transact-SQL).

Komentar (0)

Coba yang berikut ini:

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

Kemudian anda akan perlu untuk mengganti "." dengan "-".

Berikut ini adalah sebuah situs yang membantu http://www.mssqltips.com/tip.asp?tip=1145

Komentar (0)
declare @dt datetime

set @dt = getdate()

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

Saya memiliki data tetap panjang char(10) seperti yang anda inginkan format string tertentu.

Komentar (0)

Coba:

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

Lebih lanjut di ms sql tips

Komentar (0)

Coba SQL ini:

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

Anda dapat mengkonversi tanggal dalam berbagai format, syntaxe adalah sederhana untuk menggunakan :

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Kode adalah integer, berikut ini 3 adalah ketiga formating tanpa abad, jika anda ingin abad hanya mengubah kode 103.

Dalam kasus anda, i've hanya dikonversi dan membatasi ukuran nvarchar(10) seperti ini :

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

Lihat lebih lanjut di : http://www.w3schools.com/sql/func_convert.asp

Solusi lain (jika anda tanggal Datetime) adalah sederhana CAST :

CAST(MY_DATE_TIME as DATE) => 2016-09-15
Komentar (0)

OP disebutkan datetime format. Bagi saya, waktu paruh mendapat di jalan. Saya pikir itu's sedikit cleaner untuk menghapus bagian waktu (oleh casting datetime to date) sebelum memformat.

convert( varchar(10), convert( date, @yourDate ) , 111 )
Komentar (0)

Untuk SQL Server 2008+ Anda dapat menggunakan dan MENGKONVERSI FORMAT bersama-sama.

Misalnya, untuk gaya Eropa (misalnya Jerman) timestamp:

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
Komentar (0)

Ini adalah bagaimana saya melakukannya: MENGKONVERSI(NVARCHAR(10), DATE1, 103) )

Komentar (0)

Anda tidak mengatakan yang database, tapi dengan mysql berikut ini adalah cara mudah untuk mendapatkan tanggal dari timestamp (dan varchar jenis konversi harus terjadi secara otomatis):

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

Singkat dan dengan cara yang paling sederhana adalah :

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
Komentar (0)
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
Komentar (0)

Menulis fungsi

CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END
Komentar (0)