1

従来のsql-statementをSequel-versionに置き換えたいのですが、解決する問題があり、連結フィールドを作成します。

例:

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

これは正常に機能し、結果は次のようになります。

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

私の問題:「1aa」が必要です。SQLでは、これは問題ありません。

puts DB.fetch("SELECT ('1' || `text`) AS 'concat' FROM `test`").all

しかし、rubyを使用すると、構文エラーが発生します(can't convert Symbol into String (TypeError)

sel = DB[:test].select(
  ('1' + :text).as(:concat)
  )

興味深いです、これは再び機能します:

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

しかし、どうすれば文字列を連結できますか?

4

1 に答える 1

6

文字列演算子のSequels ドキュメントを見てください。

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

(注:あなた自身の質問に答えるのは良いことです-そして私はそれを得るのに少し時間が必要でした)。

于 2013-01-10T16:51:08.130 に答える