जैसे कि SQL सर्वर टाइमस्टैम्प को लौटाता है 'Nov 14 2011 03:12:12:947PM'
, क्या स्ट्रिंग को डेट फॉर्मेट में बदलने का कुछ आसान तरीका है जैसे 'Ymd H: i: s'।
अब तक मैं उपयोग करता हूं
date('Y-m-d H:i:s',strtotime('Nov 14 2011 03:12:12:947PM'))
जवाबों:
SQL सर्वर के TIMESTAMP
डेटाटाइप का किसी तिथि और समय से कोई लेना- देना नहीं है!
यह लगातार 8 बाइट पूर्णांक का केवल एक हेक्साडेसिमल प्रतिनिधित्व है - यह केवल यह सुनिश्चित करने के लिए अच्छा है कि जब से यह पढ़ा गया है तब तक कोई पंक्ति नहीं बदलती है।
आप हेक्साडेसिमल पूर्णांक को पढ़ सकते हैं या यदि आप चाहते हैं कि ए BIGINT
। उदहारण के लिए:
SELECT CAST (0x0000000017E30D64 AS BIGINT)
परिणाम है
400756068
SQL सर्वर के नए संस्करणों में, इसे कहा जा रहा है RowVersion
- क्योंकि यह वास्तव में यही है। ROWVERSION पर MSDN डॉक्स देखें :
एक डेटा प्रकार एक डेटाबेस के भीतर स्वचालित रूप से उत्पन्न, अद्वितीय बाइनरी नंबर को उजागर करता है। rowversion का उपयोग आमतौर पर संस्करण-स्टैंपिंग टेबल पंक्तियों के लिए एक तंत्र के रूप में किया जाता है। रोवरवर्जन डेटा प्रकार सिर्फ एक वृद्धि की संख्या है और एक तिथि या समय को संरक्षित नहीं करता है । दिनांक या समय रिकॉर्ड करने के लिए, डेटाटाइम 2 डेटा प्रकार का उपयोग करें।
इसलिए आप किसी SQL सर्वर को दिनांक / समय में परिवर्तित नहीं कर सकतेTIMESTAMP
- यह सिर्फ एक दिनांक / समय नहीं है।
लेकिन अगर आप टाइमस्टैम्प कह रहे हैं, लेकिन वास्तव में आपका मतलब एक DATETIME
कॉलम है - तो आप MSDN मदद में CAST और CONVERT विषय में वर्णित किसी भी मान्य दिनांक प्रारूप का उपयोग कर सकते हैं। जिन्हें SQL सर्वर द्वारा "आउट ऑफ द बॉक्स" परिभाषित और समर्थित किया गया है। किसी भी चीज का समर्थन नहीं किया जाता है, उदाहरण के लिए आपको बहुत सारे मैनुअल कास्टिंग और कंक्रीटिंग (अनुशंसित नहीं) करना होगा।
आप जिस प्रारूप की तलाश कर रहे हैं वह ODBC विहित (शैली = 121) की तरह दिखता है :
DECLARE @today DATETIME = SYSDATETIME()
SELECT CONVERT(VARCHAR(50), @today, 121)
देता है:
2011-11-14 10:29:00.470
SQL सर्वर 2012 अंत मेंFORMAT
कस्टम स्वरूपण करने के लिए एक समारोह होगा ......
TIMESTAMP
प्रकार स्तंभों
कलाकारों का उपयोग कर आप एक टाइमस्टैम्प क्षेत्र से तारीख प्राप्त कर सकते हैं:
SELECT CAST(timestamp_field AS DATE) FROM tbl_name
Explicit conversion from data type timestamp to date is not allowed.
मेरे सहकर्मियों ने मेरी मदद की:
select CONVERT(VARCHAR(10), <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(VARCHAR(10), <tms_column>, 112);
या
select CONVERT(DATE, <tms_column>, 112), count(*)
from table where <tms_column> > '2012-09-10'
group by CONVERT(DATE, <tms_column>, 112);
इस संदेश को छोड़कर, ठीक काम करता है:
डेटा प्रकार के varchar से टाइमस्टैम्प में अनुमानित रूपांतरण की अनुमति नहीं है। इस क्वेरी को चलाने के लिए CONVERT फ़ंक्शन का उपयोग करें
तो हाँ, TIMESTAMP
( RowVersion
) एक दिनांक नहीं है :)
ईमानदार होने के लिए, मैंने इसे किसी तारीख में बदलने का तरीका खोजने के लिए खुद कुछ समय के आसपास फिदा किया।
सबसे अच्छा तरीका यह है कि इसे कन्वर्ट INT
करें और तुलना करें। इस प्रकार का यही अर्थ है।
यदि आप एक तारीख चाहते हैं - बस एक Datetime
कॉलम जोड़ें और उसके बाद खुशी से जीएं :)
चीयर्स मैक
"आप उस शब्द का उपयोग करते रहते हैं। मुझे नहीं लगता कि इसका मतलब है कि आप क्या सोचते हैं।" - इनिगो मोंटोया
टाइमस्टैम्प वास्तव में समय के लिए कोई संबंध नहीं है जैसा कि मूल रूप से marc_s ने कहा है।
declare @Test table (
TestId int identity(1,1) primary key clustered
,Ts timestamp
,CurrentDt datetime default getdate()
,Something varchar(max)
)
insert into @Test (Something)
select name from sys.tables
waitfor delay '00:00:10'
insert into @Test (Something)
select name from sys.tables
select * from @Test
आउटपुट में नोटिस करें कि प्रत्येक रिकॉर्ड के लिए Ts (हेक्स) एक से बढ़ कर है, लेकिन वास्तविक समय में 10 सेकंड का अंतर है। यदि यह समय से संबंधित होता तो समय में अंतर के साथ मेल खाने के लिए टाइमस्टैम्प में अंतराल होता।
पूर्णांक कन्वर्जेंस में परिवर्तन के बाद (BIGINT, [टाइमस्टैम्प]) टाइमस्टैम्प के रूप में मुझे इसका परिणाम मिल गया है
446701117 446701118 446701119 446701120 446701121 446701122 446701123 446701124 446701124 446701125 446701126
हां, यह कोई दिनांक और समय नहीं है, यह सीरियल नंबर है
मेरे काम के लिए: TO_DATE ('19700101', 'yyyymmdd') + (TIME / 24/60/60) (oracle DB)
मैं मान लूंगा कि आपने डिटेल्स स्टेटमेंट के रूप में डेटा डंप किया है, और आप (या जो भी Googles यह है) दिनांक और समय का पता लगाने का प्रयास कर रहा है, या इसे कहीं और उपयोग करने के लिए अनुवाद कर रहा है (जैसे: MySQL आवेषण में कनवर्ट करने के लिए)। यह वास्तव में किसी भी प्रोग्रामिंग भाषा में आसान है।
चलो इस के साथ काम करते हैं:
CAST(0x0000A61300B1F1EB AS DateTime)
यह हेक्स प्रतिनिधित्व वास्तव में दो अलग-अलग डेटा तत्व हैं ... दिनांक और समय। पहले चार बाइट्स तारीख हैं, दूसरे चार बाइट्स समय हैं।
अपनी पसंद की प्रोग्रामिंग भाषा का उपयोग करके दोनों खंडों को पूर्णांक में कनवर्ट करें (यह पूर्ण रूपांतरण के लिए एक सीधा हेक्स है, जो कि हर आधुनिक प्रोग्रामिंग भाषा में समर्थित है, इसलिए, मैं उस कोड के साथ स्थान बर्बाद नहीं करूंगा जो प्रोग्रामिंग भाषा हो सकता है या नहीं हो सकता है तुम काम कर रहे हो)।
अब, उन पूर्णांकों के साथ क्या करना है:
दिनांक
दिनांक 01/01/1900 से है, और दिनों के रूप में दर्शाया जाता है। तो, 42,515 दिन को 01/01/1900 पर जोड़ें, और आपका परिणाम 05/27/2016 है।
समय
समय थोड़ा अधिक जटिल है। उस INT को ले लो और आधी रात के बाद से माइक्रोसेकंड में अपना समय पाने के लिए निम्नलिखित करें (स्यूडोकोड):
TimeINT=Hex2Int(HexTime)
MicrosecondsTime = TimeINT*10000/3
वहां से, समय के साथ माइक्रोसेकंड (38872676666.7) से ऊपर उदाहरण में) का अनुवाद करने के लिए अपनी भाषा के पसंदीदा फ़ंक्शन कॉल का उपयोग करें।
परिणाम 10: 47: 52.677 होगा
उनमें से कुछ वास्तव में SQL Server 2008 से दिनांक-समय के लिए गुप्त है बाद ।
निम्न SQL क्वेरी आज़माएं और आप स्वयं देखेंगे:
SELECT CAST (0x00009CEF00A25634 AS datetime)
उपरोक्त परिणाम होगा, 2009-12-30 09:51:03:000
लेकिन मैंने उन लोगों का सामना किया है जो वास्तव में किसी तिथि-समय पर मैप नहीं करते हैं।
कोशिश क्यों नहीं की FROM_UNIXTIME(unix_timestamp, format)
?
यकीन नहीं होता कि मैं यहाँ कुछ याद कर रहा हूँ, लेकिन क्या आप इस तरह टाइमस्टैम्प को नहीं बदल सकते:
CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110)