आप टी-एसक्यूएल में एक डेटटाइम फ़ील्ड को कैसे अपडेट करते हैं?


81

निम्न क्वेरी डेटाइम फ़ील्ड को अद्यतन नहीं करता है:

update table
SET EndDate = '2009-05-25'
WHERE Id = 1

मैंने इसे बिना किसी डैश के भी आज़माया, लेकिन यह भी काम नहीं करता है।


1
क्या वास्तविक कॉलम नाम है?
ग्रैटी

1
वास्तव में, यह एंडेडेट नहीं है, लेकिन मैंने इसे अभी तक छोटा कर दिया है।
Xaisoft

क्या आपको कोई त्रुटि मिलती है या बस कोई परिणाम नहीं मिलता है?
ग्रटज़ी

EndDateकॉलम के लिए डेटा प्रकार क्या है ?
OMG पॉनीज

यह कहता है कि 1 पंक्ति प्रभावित है, लेकिन जब मैं जांच करता हूं, तो तारीख नहीं बदली गई है।
Xaisoft

जवाबों:


154

1
SQL सर्वर 2016 में बहुत धन्यवाद काम करता है। मैं बस चर और सभी सेट का उपयोग करता हूं।
पाटसनलाइनर

मैंने उस का उपयोग किया और तारीख के बाद का समय जोड़ा और यह काम किया
फर्नांडो

33

आम तौर पर, यह काम करना चाहिए।

लेकिन क्या आप यह कोशिश कर सकते हैं? मेरे घर पीसी पर मेरे पास एसक्यूएल नहीं है, मैं खुद कोशिश नहीं कर सकता

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1

1
यह काम किया है, लेकिन मैंने पहले सभी शून्य के बिना यह कोशिश की और यह काम नहीं किया। क्यों?
Xaisoft

मैंने इसे '2009-05-25 00: 02: 01.000' के साथ आज़माया, लेकिन यह काम नहीं किया।
Xaisoft

अच्छा, गंभीरता से न ही कोई विचार है। क्योंकि आपने समय की जानकारी के बिना लिखा था, और SQL को डिफ़ॉल्ट रूप से 00: 00: 00.000 को स्वचालित रूप से संलग्न करना चाहिए। इसलिए इस पर काम किया जाना चाहिए।
सेरकान हकीमोग्लू

11

स्ट्रिंग डेटाल मौजूदा डेटफ़ॉर्मेट सेटिंग के अनुसार पोज़ किया जाता है, देखें SET DATEFORMAT । एक प्रारूप जो हमेशा काम करेगा वह है '20090525'।

अब, निश्चित रूप से, आपको 'काम नहीं करता है' को परिभाषित करने की आवश्यकता है। कोई रिकॉर्ड अपडेट नहीं किया जाता है? शायद वहId=1 किसी रिकॉर्ड से मेल नहीं खाता ...

यदि यह कहता है कि 'एक रिकॉर्ड बदल गया' तो शायद आपको हमें यह दिखाने की आवश्यकता है कि आप कैसे सत्यापित करते हैं ...


तारीख का प्रारूप इसीलिए मैं सोच रहा था कि रूपांतरण के बारे में स्पष्ट होना एक अच्छा विचार होगा ...
OMG Ponies

अच्छा सामान रेमुस, SET DATEFORMATविभिन्न स्थानीयकरणों के साथ वातावरण के लिए एसक्यूएल लिखते समय वास्तव में प्रभावी है
मैट आर

बहुत बढ़िया! इसने मेरे लिए काम किया और मुझे कुछ कदम बचाए क्योंकि मैं जिस क्षेत्र में परिवर्तित हो रहा था वह पहले से ही इस प्रारूप का उपयोग कर रहा था, अर्थात, इसे पहले आईएसओ या अन्य प्रारूप में बदलने की आवश्यकता नहीं है।
रॉबर्टो

8

डेटटाइम पैरामीटर का उपयोग करना सबसे अच्छा तरीका है। हालाँकि, यदि आप अभी भी एक स्ट्रिंग के रूप में डेटटाइम पास करना चाहते हैं, तो सीएएसटी आवश्यक नहीं होना चाहिए, क्योंकि एक भाषा अज्ञेय प्रारूप का उपयोग किया जाता है।

जैसे

दी गई तालिका की तरह:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())

निम्नलिखित को हमेशा काम करना चाहिए:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic

निम्नलिखित काम करेगा:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1

हालाँकि, यह नहीं होगा:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  

ऐसा इसलिए है क्योंकि 'YYYY-MM-DD' एक भाषा अज्ञेय प्रारूप नहीं है (SQL सर्वर के दृष्टिकोण से)।

आईएसओ 'YYYY-MM-DDThh: mm: ss' प्रारूप भी भाषा अज्ञेयवादी है, और उपयोगी है जब आपको गैर-शून्य समय पास करने की आवश्यकता होती है।

अधिक जानकारी: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes



2

यह काम करना चाहिए, मैं [तिथि] के आसपास कोष्ठक रखूंगा क्योंकि यह एक आरक्षित खोजशब्द है।


2

यदि आप किसी समय को निर्दिष्ट करने में रुचि नहीं रखते हैं, तो आप ' DD / MM / YYYY ' प्रारूप का भी उपयोग कर सकते हैं , हालांकि मैं एक रूपांतरण से चिपका रहूंगा विधि और इसके प्रासंगिक ISO प्रारूप से रहूंगा, क्योंकि आपको वास्तव में डिफ़ॉल्ट मानों का उपयोग करने से बचना चाहिए।

यहाँ एक उदाहरण है:

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.