वरचर के लिए इंट कास्ट करें


119

मेरे पास क्वेरी के नीचे है और मुझे कास्ट idकरने की आवश्यकता हैvarchar

योजना

create table t9 (id int, name varchar (55));
insert into t9( id, name)values(2, 'bob');

मैंने क्या कोशिश की

select CAST(id as VARCHAR(50)) as col1 from t9;

select CONVERT(VARCHAR(50),id) as colI1 from t9;

लेकिन वे काम नहीं करते। कृपया सुझाव दे।


4
अगली बार वास्तविक त्रुटि संदेश को शामिल करना सुनिश्चित करें जिसे आप देख रहे हैं। आमतौर पर यह पता लगाने में बहुत मदद करता है कि गलत क्या है। इस बार आप भाग्यशाली थे कि हम में से बहुत से लोग जानते हैं कि यहाँ क्या हो रहा है।
एरोन

जवाबों:


218

आपको castया डेटाटाइप के convertरूप में इसकी आवश्यकता होगी CHAR, कोई varcharडेटाटाइप नहीं है जिसे आप डेटा को डाल / बदल सकते हैं:

select CAST(id as CHAR(50)) as col1 
from t9;

select CONVERT(id, CHAR(50)) as colI1 
from t9;

निम्नलिखित SQL देखें - कार्रवाई में - SQL Fiddle पर :

/*! Build Schema */
create table t9 (id INT, name VARCHAR(55));
insert into t9 (id, name) values (2, 'bob');

/*! SQL Queries */
select CAST(id as CHAR(50)) as col1 from t9;
select CONVERT(id, CHAR(50)) as colI1 from t9;

इस तथ्य के अलावा कि आप एक गलत डेटाटाइप में बदलने की कोशिश कर रहे थे, जो वाक्यविन्यास आप उपयोग कर रहे थे convertवह गलत था। convertसमारोह निम्नलिखित जहां का उपयोग करता है exprअपने स्तंभ या मूल्य है:

 CONVERT(expr,type)

या

 CONVERT(expr USING transcoding_name)

आपकी मूल क्वेरी में सिंटैक्स पीछे की ओर था।


यह उल्लेख के लायक हो सकता है कि आपको लंबाई प्रदान करने की आवश्यकता नहीं है - दोनों कास्ट और कन्वर्ट दोनों टी 9 से कोल 1 के रूप में चयनित कास्ट (आईडी के रूप में सीएचआर) की तर्ज पर कुछ करने की अनुमति देंगे;
जोनाथन सायस

1
@JonathanSayce यह बुरा व्यवहार लंबाई का उपयोग नहीं करने के लिए है, मैं पढ़ने का सुझाव लात के लिए बुरी आदतों: (लम्बाई) के बिना VARCHAR घोषित करने से हारून बर्ट्रेंड
टैरिन

दिलचस्प पोस्ट - धन्यवाद @bluefeet - मैंने कास्ट / कन्वर्ट परिदृश्य में यह मान लिया होगा कि यह आकार का उपयोग किया होगा जो इसके बजाय कुछ मनमाना चाहिए।
जोनाथन सायस

@JonathanSayce मैं MySQL के ins और outs से अत्यधिक परिचित नहीं हूँ और यह कुछ मनमाने ढंग से उपयोग नहीं कर सकता है, लेकिन मैं MySQL इंजन पर भरोसा नहीं करूँगा कि वह स्मार्ट (MySQL का कोई अपराध नहीं) है। यह सुनिश्चित करने के लिए कि आपको उचित लंबाई मिले, मैं हमेशा एक स्पष्ट रूप से प्रदान करूंगा।
टैरिन

2
@Pacerier IMO, concat()रूपांतरण करने के लिए आवश्यक नहीं है कि सहज हो। मैं अपना कोड स्पष्ट करना पसंद करूंगा और यह पूरी तरह से समझ में नहीं आता है।
टैरिन

35

आप ऐसा कर रहे हैं, क्योंकि VARCHARएक मान्य प्रकार में डालना नहीं है। MySQL डॉक्स ( http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html#function_cast ) के अनुसार आप केवल यह कर सकते हैं:

  • बायनरी [(एन)]
  • CHAR [(एन)]
  • तारीख
  • दिनांक और समय
  • दशमलव [(एम [, डी])]
  • हस्ताक्षर
  • [पूर्णांक]
  • समय
  • UNSIGNED [INTEGER]

मुझे लगता है कि आपका सबसे अच्छा दांव उपयोग करना है CHAR


यकीन नहीं है क्योंकि मैं mysql का उपयोग करता हूं, लेकिन ऐसा लगता है जैसे SQL varchar stackoverflow.com/a/11989599 की अनुमति देता है, हालांकि आपका उत्तर mysql के लिए सही है, धन्यवाद।
CrandellWS

@ ऐरन अगर मेरा क्षेत्र चार (1) है, लेकिन मैं इसे enum ('m', 'f') में बदलना चाहता हूं।
दिनेश कांडपाल

17

हाँ

SELECT id || '' FROM some_table;
or SELECT id::text FROM some_table;

postgresql है, लेकिन mySql इसकी अनुमति नहीं देता है!

mySql में शॉर्ट कट:

SELECT concat(id, '') FROM some_table;

1
हे, सिलेक्ट कॉनैट (आईडी, '') कुछ_टेबल से; MySQL के लिए एक अच्छा हैक है, धन्यवाद!
चार्ल्स कैवलकेंट


3

मेरे पास MySQL नहीं है, लेकिन RDBMS (पोस्टग्रेज, दूसरों के बीच) हैं, जिसमें आप हैक का उपयोग कर सकते हैं

SELECT id || '' FROM some_table;

समवर्ती एक अंतर्निहित रूपांतरण करता है।


1
पोस्टग्रैज में हालांकि स्पष्ट और संक्षिप्त कास्टिंग है, ":: data_type"। यहां उचित तरीके का उपयोग नहीं करना शर्म की बात होगी।
मैसूरल का कंसर्ट

2

मैंने पूर्णांक कॉलम xa varcharकॉलम की तुलना करने के लिए एक समस्या हल की

where CAST(Column_name AS CHAR CHARACTER SET latin1 ) collate latin1_general_ci = varchar_column_name



0

मैं सामान्य शब्दों में इसका उत्तर दूंगा, और उपरोक्त योगदानकर्ताओं का बहुत आभारी हूं।
मैं MySQL कार्यक्षेत्र पर MySQL का उपयोग कर रहा हूं। मेरे पास एक समान मुद्दा था जो विधि का उपयोग करके एक charऔर एक को समेटने की कोशिश कर रहा था । संक्षेप में, मेरे लिए क्या काम किया है:intGROUP_CONCAT

मान लीजिए कि आपका char'ग' है और int'मैं' है, इसलिए, प्रश्न बन जाता है:
...GROUP_CONCAT(CONCAT(c,' ', CAST(i AS CHAR))...


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