Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में sysjobhistory डेटाटाइम और अवधि कॉलम प्रारूपित करें

यदि आपने कभी sysjobhistory . के बारे में पूछा है msdb में तालिका डेटाबेस, आपको शायद पता होगा कि डेटाटाइम और अवधि कॉलम पूर्णांक के रूप में संग्रहीत हैं।

विशेष रूप से, जब आप इस तालिका को क्वेरी करते हैं, तो run_date , run_time , और duration कॉलम को पूर्णांक के रूप में लौटाया जाता है, जिससे इसे पढ़ना मुश्किल हो सकता है।

नीचे एक क्वेरी है जिसका उपयोग आप इस डेटा को पढ़ने में आसान प्रारूप में वापस करने के लिए कर सकते हैं।

समस्या

सबसे पहले, आइए देखें कि ये कॉलम कैसे लौटाए जाते हैं:

SELECT TOP 15
	run_date,
	run_time,
	run_duration
FROM msdb.dbo.sysjobhistory
ORDER BY run_duration DESC;

परिणाम:

run_date    run_time    run_duration
 
 20201215    155451      625
 20201215    155948      128
 20201115    20001       17
 20201115    20002       16
 20201218    44026       13
 20201217    20000       10
 20201218    44029       10
 20201216    21902       9
 20201217    20001       9
 20201219    23527       9
 20201213    34249       8
 20201216    21903       8
 20201219    23528       8
 20201213    34250       7
 20201214    32114       7

यहां बताया गया है कि प्रत्येक कॉलम कैसे संग्रहीत/प्रस्तुत किया जाता है:

  • run_date स्तंभ YYYYMMDD प्रारूप में संग्रहीत है।
  • run_time कॉलम को 24 घंटे की घड़ी में HHMMSS फॉर्मेट में स्टोर किया जाता है। लेकिन कोई अग्रणी शून्य नहीं है।
  • run_duration कॉलम एचएचएमएमएसएस प्रारूप में संग्रहीत है। फिर, कोई अग्रणी शून्य नहीं है। साथ ही प्रत्येक खंड के बीच अंतर करने में हमारी सहायता करने के लिए कोई कोलन नहीं हैं। तो ऊपर दिए गए उदाहरण में, पहला काम 6 मिनट 25 सेकंड में, दूसरा काम 1 मिनट 28 सेकंड में और तीसरा काम 17 सेकंड में पूरा हुआ।

एक बार जब आप जान जाते हैं कि स्वरूपण कैसे काम करता है, तो आमतौर पर इसका पता लगाना बहुत मुश्किल नहीं होता है। लेकिन हम मनुष्यों के लिए पढ़ना अनपेक्षित हो सकता है।

समाधान

यहां एक समाधान दिया गया है जो डेटा को अधिक मानव-पठनीय प्रारूप में प्रस्तुत करता है:

SELECT TOP 15
	msdb.dbo.AGENT_DATETIME(run_date, run_time) AS RunDateTime,
	STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobhistory
ORDER BY run_duration DESC;

परिणाम:

RunDateTime                RunDuration
 
 2020-12-15 15:54:51.000    00:00:06:25
 2020-12-15 15:59:48.000    00:00:01:28
 2020-11-15 02:00:01.000    00:00:00:17
 2020-11-15 02:00:02.000    00:00:00:16
 2020-12-18 04:40:26.000    00:00:00:13
 2020-12-17 02:00:00.000    00:00:00:10
 2020-12-18 04:40:29.000    00:00:00:10
 2020-12-16 02:19:02.000    00:00:00:09
 2020-12-17 02:00:01.000    00:00:00:09
 2020-12-19 02:35:27.000    00:00:00:09
 2020-12-13 03:42:49.000    00:00:00:08
 2020-12-16 02:19:03.000    00:00:00:08
 2020-12-19 02:35:28.000    00:00:00:08
 2020-12-13 03:42:50.000    00:00:00:07
 2020-12-14 03:21:14.000    00:00:00:07

यहां, मैं अनिर्दिष्ट AGENT_DATETIME() . का उपयोग करता हूं run_dateको कन्वर्ट करने के लिए फंक्शन और run_time अधिक पठनीय प्रारूप में कॉलम।

मैं तब टी-एसक्यूएल कार्यों की एक श्रृंखला का उपयोग करता हूं (STUFF() , RIGHT() , CAST() , और REPLICATE() ) run_duration . प्राप्त करने के लिए अधिक मानव-पठनीय प्रारूप में कॉलम। ये सुनिश्चित करते हैं कि एक उपयुक्त स्थान पर कोलन डाले गए हैं, और प्रत्येक खंड के लिए हमेशा दो अंक (आवश्यक होने पर एक अग्रणी शून्य सहित) होते हैं।

अधिक स्वरूपण

आप इसे एक कदम आगे ले जा सकते हैं और अन्य कार्यों का उपयोग कर सकते हैं, जैसे कि FORMAT() run_date प्रस्तुत करने के लिए कार्य करता है और run_time एक प्रारूप में कॉलम जो और भी अधिक पाठक-अनुकूल है।

SELECT TOP 15
	FORMAT(msdb.dbo.AGENT_DATETIME(run_date, run_time), 'U') AS RunDateTime
FROM msdb.dbo.sysjobhistory
ORDER BY run_duration DESC;

परिणाम:

RunDateTime
 Tuesday, December 15, 2020 11:54:51 PM
 Tuesday, December 15, 2020 11:59:48 PM
 Sunday, November 15, 2020 10:00:01 AM
 Sunday, November 15, 2020 10:00:02 AM
 Friday, December 18, 2020 12:40:26 PM
 Thursday, December 17, 2020 10:00:00 AM
 Friday, December 18, 2020 12:40:29 PM
 Wednesday, December 16, 2020 10:19:02 AM
 Thursday, December 17, 2020 10:00:01 AM
 Saturday, December 19, 2020 10:35:27 AM
 Sunday, December 13, 2020 11:42:49 AM
 Wednesday, December 16, 2020 10:19:03 AM
 Saturday, December 19, 2020 10:35:28 AM
 Sunday, December 13, 2020 11:42:50 AM
 Monday, December 14, 2020 11:21:14 AM

आप इस फ़ंक्शन के साथ-साथ संस्कृति तर्क के साथ किसी भी अन्य प्रारूप विनिर्देशक का उपयोग कर सकते हैं।

अधिक जानकारी और उदाहरणों के लिए देखें:

  • एसक्यूएल सर्वर में दिनांक और समय को कैसे प्रारूपित करें
  • मानक दिनांक और समय प्रारूप स्ट्रिंग्स
  • कस्टम दिनांक और समय प्रारूप स्ट्रिंग्स

नौकरी का नाम प्राप्त करना

sysjobhistory तालिका नौकरी के नाम संग्रहीत नहीं करती है। यह केवल उनकी आईडी संग्रहीत करता है।

दिनांक/समय/अवधि डेटा के साथ कार्य का नाम वापस करने के लिए, आप sysjobs_view पर एक जॉइन कर सकते हैं देखें (या sysjobs तालिका) नौकरी का नाम पाने के लिए।

यहां एक क्वेरी का उदाहरण दिया गया है जो ऐसा करती है:

SELECT jv.name AS Job,
		jh.step_name AS Step,
		msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
		STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;

परिणाम:


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑडिट तालिका में SQL सर्वर में रिकॉर्ड परिवर्तन लॉग करें

  2. SQL सर्वर मौजूदा तालिका में ऑटो वृद्धि प्राथमिक कुंजी जोड़ें

  3. SQL सर्वर एजेंट जॉब (T-SQL) के लिए जॉब स्टेप अपडेट करें

  4. डेटाबेस और रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) क्या है

  5. आंतरायिक ODBC कनेक्शन विफलता