Cách nối chuỗi với phần đệm trong sqlite


213

Tôi có ba cột trong một bảng sqlite:

    Column1    Column2    Column3
    A          1          1
    A          1          2
    A          12         2
    C          13         2
    B          11         2

Tôi cần phải chọn Column1-Column2-Column3(ví dụ A-01-0001). Tôi muốn đệm mỗi cột bằng một-

Tôi là người mới bắt đầu liên quan đến SQLite, mọi trợ giúp đều được đánh giá cao


Có thể trùng lặp: stackoverflow.com/q/3568779/2291
Jon Adams

Câu trả lời:


382

Các ||nhà điều hành là "concatenate" - nó tham gia cùng hai dây toán hạng của nó.

Từ http://www.sqlite.org/lang_expr.html

Để đệm, cách dường như gian lận mà tôi đã sử dụng là bắt đầu với chuỗi mục tiêu của bạn, giả sử '0000', nối '0000423', sau đó là lớp nền (kết quả, -4, 4) cho '0423'.

Cập nhật: Có vẻ như không có triển khai gốc "lpad" hoặc "rpad" trong SQLite, nhưng bạn có thể làm theo (về cơ bản những gì tôi đã đề xuất) tại đây: http://verysimple.com/2010/01/12/sqlite-lpad -rpad-chức năng /

-- the statement below is almost the same as
-- select lpad(mycolumn,'0',10) from mytable

select substr('0000000000' || mycolumn, -10, 10) from mytable

-- the statement below is almost the same as
-- select rpad(mycolumn,'0',10) from mytable

select substr(mycolumn || '0000000000', 1, 10) from mytable

Đây là vẻ ngoài của nó:

SELECT col1 || '-' || substr('00'||col2, -2, 2) || '-' || substr('0000'||col3, -4, 4)

nó mang lại

"A-01-0001"
"A-01-0002"
"A-12-0002"
"C-13-0002"
"B-11-0002"

9
@Andrew - Nói chung bất kỳ hoạt động vô hướng nào liên quan đến NULL sẽ mang lại NULL. Yêu cầu của bạn có thể được đáp ứng bằng cách sử dụng COALESCE(nullable_field, '') || COALESCE(another_nullable_field, '').
MatBailie

37

SQLite có một printfchức năng thực hiện chính xác điều đó:

SELECT printf('%s-%.2d-%.4d', col1, col2, col3) FROM mytable

1
Lỗi truy vấn: không có chức năng như vậy: printf Không thể thực thi câu lệnh chọn printf ('% s.% S', id, url) từ giới hạn mytable 7. Phiên bản của tôi là 3.8.2 2014-12-06. Phiên bản nào bạn đang sử dụng?
Berry Tsakala

5
@ BlackBerryTsakala: 3.8.6
Yakov Galka

1
3.8.3 "Và có những cải tiến nhỏ khác như bổ sung hàm SQL printf ()."
Sandburg

17

Chỉ cần thêm một dòng cho câu trả lời @tofutim ... nếu bạn muốn tên trường tùy chỉnh cho hàng được nối ...

SELECT 
  (
    col1 || '-' || SUBSTR('00' || col2, -2, 2) | '-' || SUBSTR('0000' || col3, -4, 4)
  ) AS my_column 
FROM
  mytable;

Đã thử nghiệm trên SQLite 3.8.8.3 , Cảm ơn!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.