ปัญหาทั่วไป
พิมพ์อย่างไร้เดียงสาหล่อสตริงใด ๆ เป็นจำนวนเต็มเช่นนั้น
SELECT ''::integer
มักส่งผลให้เกิดข้อผิดพลาดที่มีชื่อเสียง:
Query failed: ERROR: invalid input syntax for integer: ""
ปัญหา
PostgreSQL ไม่มีฟังก์ชั่นที่กำหนดไว้ล่วงหน้าสำหรับการได้อย่างปลอดภัยหล่อพิมพ์สตริงเป็นจำนวนเต็ม
สารละลาย
สร้างฟังก์ชั่นที่ผู้ใช้กำหนดแรงบันดาลใจจากของ PHP intval ()ฟังก์ชั่น
CREATE FUNCTION intval(character varying) RETURNS integer AS $$
SELECT
CASE
WHEN length(btrim(regexp_replace($1, '[^0-9]', '','g')))>0 THEN btrim(regexp_replace($1, '[^0-9]', '','g'))::integer
ELSE 0
END AS intval;
$$
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
การใช้
/* Example 1 */
SELECT intval('9000');
-- output: 9000
/* Example 2 */
SELECT intval('9gag');
-- output: 9
/* Example 3 */
SELECT intval('the quick brown fox jumps over the lazy dog');
-- output: 0