c# - SQLite में स्वचालित टाइमस्टैम्प कैसे करें?




timestamp (6)

बस किसी फ़ील्ड के लिए डिफ़ॉल्ट मान घोषित करें:

CREATE TABLE MyTable(
    ID INTEGER PRIMARY KEY,
    Name TEXT,
    Other STUFF,
    Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

हालांकि, यदि आपका INSERT कमांड स्पष्ट रूप से इस फ़ील्ड को NULL सेट करता NULL , तो यह पूर्ण पर सेट हो जाएगा।

मेरे पास एक SQLite डेटाबेस है, संस्करण 3 और मैं इस डेटाबेस का उपयोग करने वाले एप्लिकेशन को बनाने के लिए C # का उपयोग कर रहा हूं।

मैं समेकन के लिए तालिका में एक टाइमस्टैम्प फ़ील्ड का उपयोग करना चाहता हूं, लेकिन मुझे लगता है कि जब मैं एक नया रिकॉर्ड डालता हूं, तो यह फ़ील्ड सेट नहीं होता है, और शून्य है।

उदाहरण के लिए, एमएस एसक्यूएल सर्वर में यदि मैं टाइमस्टैम्प फ़ील्ड का उपयोग करता हूं तो यह डेटाबेस द्वारा अपडेट किया जाता है, मुझे अपने आप को सेट नहीं करना है। क्या यह SQLite में संभव है?


उपरोक्त उत्तरों के पूरक के लिए ...

यदि आप ईएफ का उपयोग कर रहे हैं, तो डेटा एनोटेशन [टाइमस्टैम्प] के साथ संपत्ति को सजाने के लिए, फिर अपने संदर्भ वर्ग के अंदर ओवरराइड ऑनमोडेल क्रिएटिंग पर जाएं, और इस फ़्लुएंट एपीआई कोड को जोड़ें:

modelBuilder.Entity<YourEntity>()
                .Property(b => b.Timestamp)
                .ValueGeneratedOnAddOrUpdate()
                .IsConcurrencyToken()
                .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");

यह इस डेटा में डाले जाने वाले प्रत्येक डेटा के लिए डिफ़ॉल्ट मान देगा।


आप कस्टम डेटाटाइम का उपयोग करके उपयोग कर सकते हैं ...

 create table noteTable3 
 (created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y   %H:%M', 'NOW','localtime')),
 title text not null, myNotes text not null);

वर्तमान सिस्टम दिनांक प्राप्त करने के लिए 'अब', 'लोकलटाइम' का उपयोग करें, अन्यथा यह आपके डीबी में सम्मिलन समय के बाद आपके डेटाबेस में कुछ अतीत या अन्य समय दिखाएगा।

धन्यवाद...


datefunc को स्वचालित datefunc पूरा करने का एक कामकाजी उदाहरण पढ़ना होगा:

sqlite> CREATE TABLE 'test' ( 
   ...>    'id' INTEGER PRIMARY KEY,
   ...>    'dt1' DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')), 
   ...>    'dt2' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), 
   ...>    'dt3' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime'))
   ...> );

आइए कुछ पंक्तियों को इस तरह से डालें जो स्वचालित डेटाटाइम पूर्णता आरंभ करता है:

sqlite> INSERT INTO 'test' ('id') VALUES (null);
sqlite> INSERT INTO 'test' ('id') VALUES (null);

संग्रहीत डेटा स्पष्ट रूप से दिखाता है कि पहले दो समान हैं लेकिन तीसरे कार्य नहीं हैं:

sqlite> SELECT * FROM 'test';
1|2017-09-26 09:10:08|2017-09-26 09:10:08|2017-09-26 09:10:08.053
2|2017-09-26 09:10:56|2017-09-26 09:10:56|2017-09-26 09:10:56.894

ध्यान दें कि SQLite फ़ंक्शंस कोष्ठक में घिरा हुआ है! इसे एक उदाहरण में दिखाने में कितना मुश्किल था?

मज़े करो!


आप ट्रिगर्स का उपयोग कर सकते हैं। बहुत अच्छी तरह से काम करता है

CREATE TABLE MyTable(
ID INTEGER PRIMARY KEY,
Name TEXT,
Other STUFF,
Timestamp DATETIME);


CREATE TRIGGER insert_Timestamp_Trigger
AFTER INSERT ON MyTable
BEGIN
   UPDATE MyTable SET Timestamp =STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id;
END;

CREATE TRIGGER update_Timestamp_Trigger
AFTER UPDATE On MyTable
BEGIN
   UPDATE MyTable SET Timestamp = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id;
END;

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

यदि आप का मतलब है कि आप यूनिक्स टाइमस्टैम्प या मूल MySQL डेटाटाइम फ़ील्ड का उपयोग करने के बीच निर्णय लेना चाहते हैं, तो देशी प्रारूप के साथ जाएं। आप MySQL के भीतर गणना कर सकते हैं ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)") और जब आप रिकॉर्ड ("SELECT UNIX_TIMESTAMP(my_datetime)") तो मान के प्रारूप को यूनिक्स टाइमस्टैम्प में ("SELECT UNIX_TIMESTAMP(my_datetime)") अगर आप इसे PHP के साथ संचालित करना चाहते हैं।





c# sqlite timestamp