如何使用续集将表字段与字符串连接起来

knu*_*nut 1 ruby concat concatenation sequel

我想用Sequel版本替换遗留的sql语句,并且有问题要解决创建一个连接字段.

一个例子:

require 'sequel'
DB = Sequel.sqlite
DB.create_table(:test){
  field :text, :type => :nvarchar, :size => 5
}
DB[:test].insert('aa')
DB[:test].insert('bb')
DB[:test].insert('cc')


sel = DB[:test].select(
  (:text + '1' ).as(:concat)
  )
puts sel.sql
puts sel.all
Run Code Online (Sandbox Code Playgroud)

这很好用,结果是:

SELECT (`text` || '1') AS 'concat' FROM `test`
{:concat=>"aa1"}
{:concat=>"bb1"}
{:concat=>"cc1"}
Run Code Online (Sandbox Code Playgroud)

我的问题:我需要'1aa'.使用SQL这没有问题:

puts DB.fetch("SELECT ('1' || `text`) AS 'concat' FROM `test`").all
Run Code Online (Sandbox Code Playgroud)

但是对于ruby我收到了语法错误(can't convert Symbol into String (TypeError):

sel = DB[:test].select(
  ('1' + :text).as(:concat)
  )
Run Code Online (Sandbox Code Playgroud)

有趣的是,这再次有效:

sel = DB[:test].select(
  (:text + '1' + :text).as(:concat)
  )
puts sel.sql
puts sel.all      
Run Code Online (Sandbox Code Playgroud)

但是如何连接字符串呢?

knu*_*nut 5

只需查看Sequels文档到String Operators即可

sel = DB[:test].select(
  Sequel.join(['1', :text]).as(:concat)
  )
puts sel.sql
puts sel.all
Run Code Online (Sandbox Code Playgroud)

(注:回答你自己的问题是一件好事 - 我需要一些时间才能得到它).