سؤال

أنا أعمل على استعلام في Sql Server 2005 حيث أحتاج إلى تحويل قيمة DateTime متغير إلى أ varchar متغير في yyyy-mm-dd تنسيق (بدون جزء من الوقت).كيف يمكنني فعل ذلك؟

هل كانت مفيدة؟

المحلول

مع خادم Microsoft Sql:

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

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

نصائح أخرى

وإليك بعض اختبار 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

ها هي النتيجة

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) أقصر لتقليص الوقت.على سبيل المثال:

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

المخرجات:

May 18 2018
May 18 2018  9:57AM

حاول القيام بما يلي:

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

للحصول على وقت التاريخ الكامل وليس التاريخ فقط، قم بما يلي:

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

راجع هذه الصفحة للتعرف على أنماط التحويل:

http://msdn.microsoft.com/en-us/library/ms187928.aspx
أو
وظيفة SQL Server CONVERT()

يحتوي SQL Server 2012 على وظيفة جديدة، FORMAT:http://msdn.microsoft.com/en-us/library/ee634924.aspx

ويمكنك استخدام سلاسل تنسيق التاريخ والوقت المخصصة: http://msdn.microsoft.com/en-us/library/ee634398.aspx

تشير هذه الصفحات إلى أنها متوفرة أيضًا على SQL2008R2، لكن ليس لدي صفحة واحدة مفيدة لاختبار ما إذا كان هذا هو الحال.

مثال للاستخدام (التاريخ والوقت الأسترالي):

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

أيضاً Cast أو Convert:

بناء الجملة ل CAST:

CAST ( expression AS data_type [ (length ) ])

بناء الجملة ل CONVERT:

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

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

في الواقع منذ أن طلبت تنسيقًا محددًا:

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

يمكنك استخدام DATEPART(DATEPART, VARIABLE).على سبيل المثال:

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)

- يمنحك هذا الوقت كـ 0 بالتنسيق "yyyy-mm-dd 00:00:00.000"


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 

مع Microsoft SQL Server:

استخدام بناء الجملة للتحويل:

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

مثال:

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

بالنسبة للأسلوب يمكنك العثور على مزيد من المعلومات هنا: MSDN - الإرسال والتحويل (Transact-SQL).

يحاول:

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

المزيد عن نصائح مللي SQL

حاول القيام بما يلي:

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

ثم ستحتاج إلى استبدال "." مع "-".

هنا موقع يساعدhttp://www.mssqltips.com/tip.asp?tip=1145

declare @dt datetime

set @dt = getdate()

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

لدي طول بيانات ثابت char(10) كما تريد تنسيق سلسلة محددة.

ذكر البروتوكول الاختياري التاريخ والوقت شكل.بالنسبة لي، جزء الوقت يعيق الطريق.
أعتقد أنه من الأنظف قليلاً إزالة جزء الوقت (عن طريق إرسال التاريخ والوقت حتى الآن) قبل التنسيق.

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

هذه هي الطريقة التي أفعل ذلك: CONVERT(NVARCHAR(10), DATE1, 103) )

يمكنك تحويل التاريخ الخاص بك في العديد من التنسيقات، وبناء الجملة سهل الاستخدام:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • الكود عبارة عن عدد صحيح، هنا 3 هو التنسيق الثالث بدون القرن، إذا كنت تريد القرن فقط قم بتغيير الكود إلى 103.

في حالتك, لقد قمت للتو بتحويل الحجم وتقييده بواسطة nvarchar(10) مثل هذا:

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

انظر أكثر في : http://www.w3schools.com/sql/func_convert.asp

حل آخر (إذا كان تاريخك هو Datetime) فهو أمر بسيط يقذف :

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

جرب SQL هذا:

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

بالنسبة لـ SQL Server 2008+، يمكنك استخدام CONVERT وFORMAT معًا.

على سبيل المثال، للنمط الأوروبي (على سبيل المثال.ألمانيا) الطابع الزمني:

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

لم تذكر قاعدة البيانات، ولكن باستخدام mysql، توجد طريقة سهلة للحصول على تاريخ من الطابع الزمني (ويجب أن يحدث تحويل نوع varchar تلقائيًا):

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

أقصر الطرق وأبسطها هي:

DECLARE @now AS DATETIME = GETDATE()

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

أنت لا تقول ما هي اللغة ولكني أفترض C#/.NET لأنه لديه مواطن DateTime نوع البيانات.في هذه الحالة فقط قم بتحويله باستخدام ملف ToString الطريقة واستخدام محدد التنسيق مثل:

DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");

ومع ذلك، أود أن أحذر من استخدام هذا في استعلام قاعدة بيانات أو متسلسل في عبارة SQL.تتطلب قواعد البيانات سلسلة تنسيق محددة لاستخدامها.من الأفضل لك تصفية الجزء الزمني واستخدام DateTime كمعلمة SQL إذا كان هذا هو ما تحاول تحقيقه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top