2016-09-28 11 views
5

मैं MySQL में एक JSONFIELD "डाटा" से एक datetime निकालने के लिए कोशिश कर रहा हूँ।श्रृंखलन JSON_EXTRACT या STR_TO_DATE विफल रहता है

अगर मैं फिर भी एक साधारण JSON_EXTRACT करते हैं, वापसी फ़ील्ड प्रकार एक JSON है।

mysql> select JSON_EXTRACT(data, "$.new_time") from analytics limit 10; 
+----------------------------------+ 
| JSON_EXTRACT(data, "$.new_time") | 
+----------------------------------+ 
| NULL        | 
| "2016-09-30T04:00:00+00:00"  | 
| "2016-09-29T05:30:00+00:00"  | 
| NULL        | 
| "2016-10-01T05:30:00+00:00"  | 
| "2016-09-27T23:00:00+00:00"  | 
| NULL        | 
| "2016-09-23T01:30:00+00:00"  | 
| "2016-09-23T04:00:00+00:00"  | 
| "2016-09-27T01:30:00+00:00"  | 
+----------------------------------+ 

मैं इसे एक MySQL DATETIME में परिवर्तित करना चाहता हूं। लेकिन अगर मैं JSON_EXTRACT और STR_TO_DATETIME श्रृंखला, मैं सभी शून्य मान प्राप्त:

mysql> select STR_TO_DATE(JSON_EXTRACT(data, "$.new_time") ,"%Y-%m-%d") from analytics_calendaranalytics limit 10; 
+-----------------------------------------------------------+ 
| STR_TO_DATE(JSON_EXTRACT(data, "$.new_time") ,"%Y-%m-%d") | 
+-----------------------------------------------------------+ 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
| NULL              | 
+-----------------------------------------------------------+ 

इसी तरह, DATETIME के ​​रूप में एक कास्ट भी विफल रहता है:

mysql> select CAST(JSON_EXTRACT(data, "$.new_time") as DATETIME) from analytics_calendaranalytics limit 10; 
+----------------------------------------------------+ 
| CAST(JSON_EXTRACT(data, "$.new_time") as DATETIME) | 
+----------------------------------------------------+ 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
| NULL            | 
+----------------------------------------------------+ 

इन दोनों कमांड का काम जब मैं स्ट्रिंग मान के साथ शुरू:

mysql> select CAST("2016-09-30T04:00:00+00:00" as DATETIME); 
+-----------------------------------------------+ 
| CAST("2016-09-30T04:00:00+00:00" as DATETIME) | 
+-----------------------------------------------+ 
| 2016-09-30 04:00:00       | 
+-----------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> select STR_TO_DATE("2016-09-30T04:00:00+00:00", "%Y-%m-%d"); 
+------------------------------------------------------+ 
| STR_TO_DATE("2016-09-30T04:00:00+00:00", "%Y-%m-%d") | 
+------------------------------------------------------+ 
| 2016-09-30           | 
+------------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

इस को हल करने में किसी भी मदद की सराहना करते हैं!

उत्तर

6

आप का उपयोग करने के JSON_UNQUOTE

select CAST(JSON_UNQUOTE(JSON_EXTRACT(data, "$.new_time")) as DATETIME) from analytics_calendaranalytics limit 10; 

काम होता है। मैं कह रहा हूँ होगा क्योंकि आप नमूना डेटा उपलब्ध नहीं कराई है। मैं इस प्रकार की कोशिश की:

select @js := JSON_OBJECT('new_time',"2016-09-30T04:00:00+00:00" ); 

select CAST(JSON_UNQUOTE(JSON_EXTRACT(@js,'$.new_time')) as DATETIME); 

निम्न क्वेरी भी काम करता है

select STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(@js,'$.new_time')) ,"%Y-%m-%d"); 
+0

बिल्कुल सही! धन्यवाद @ e4c5 – rtindru

+1

खुशी है कि मदद की किया गया है – e4c5

संबंधित मुद्दे