ด้วยคอลัมน์ประเภทสตริงเช่นcharacter(2)
(ดังที่คุณกล่าวถึงในภายหลัง) การต่อข้อมูลที่แสดงนั้นใช้งานได้เพราะอ้างถึงคู่มือ:
[ ... ] ผู้ประกอบการ concatenation สตริง ( ||
) รับข้อมูลที่ไม่ใช่สตริงตราบใดที่อย่างน้อยหนึ่งการป้อนข้อมูลเป็นประเภทสตริงดังแสดงใน
ตารางที่ 9.8 สำหรับกรณีอื่น ๆ แทรกการข่มขู่ที่ชัดเจนไปที่text
[... ]
เหมืองเน้นหนัก ตัวอย่างที่ 2 ( select a||', '||b from foo
) ใช้งานได้กับชนิดข้อมูลใด ๆเนื่องจาก', '
ค่าเริ่มต้นตัวอักษรสตริงที่ไม่ได้พิมพ์เพื่อพิมพ์text
ทำให้นิพจน์ทั้งหมดถูกต้องในทุกกรณี
สำหรับชนิดข้อมูลที่ไม่ใช่สตริงคุณสามารถ "แก้ไข" คำสั่งที่ 1 โดยการหล่อtext
อย่างน้อยหนึ่งอาร์กิวเมนต์ ( ประเภทใดก็ได้ที่สามารถส่งไปยังtext
):
SELECT a::text || b AS ab FROM foo;
ตัดสินจากคำตอบของคุณเองว่า " ไม่ทำงาน " ควรจะหมายถึง " return NULL " ผลลัพธ์ของสิ่งที่ต่อกันเป็น NULL คือ NULL หากค่า NULLสามารถมีส่วนร่วมและผลลัพธ์จะต้องไม่เป็น NULL ใช้concat_ws()
เพื่อเชื่อมค่าจำนวนเท่าใดก็ได้ (Postgres 9.1 หรือใหม่กว่า):
SELECT concat_ws(', ', a, b) AS ab FROM foo;
หรือconcat()
ถ้าคุณไม่ต้องการตัวคั่น:
SELECT concat(a, b) AS ab FROM foo;
ไม่จำเป็นต้องใช้การพิมพ์แบบนี้เนื่องจากทั้งสองฟังก์ชั่นรับ"any"
อินพุตและทำงานกับการแทนข้อความ
รายละเอียดเพิ่มเติม (และทำไมCOALESCE
ผู้แทนที่ไม่ดี) ในคำตอบที่เกี่ยวข้องนี้:
+
ไม่ใช่ตัวดำเนินการที่ถูกต้องสำหรับการต่อสตริงใน Postgres (หรือ SQL มาตรฐาน) เป็นความคิดส่วนตัวของ Microsoft ที่จะเพิ่มลงในผลิตภัณฑ์ของตน
ไม่ค่อยมีเหตุผลที่ดีใด ๆ ในการใช้งานcharacter(n)
(ไวพจน์: char(n)
) ใช้หรือtext
varchar
รายละเอียด:
text
ประเภทอื่น