Class: OCI8::BindType::IntervalYM
- Inherits:
-
OCIIntervalYM
- Object
- OCIIntervalYM
- OCI8::BindType::IntervalYM
- Defined in:
- lib/oci8/datetime.rb
Overview
– OCI8::BindType::IntervalYM ++
This is a helper class to select or bind Oracle data type INTERVAL YEAR TO MONTH
. The retrieved value is the number of months between two timestamps.
The value can be applied to DateTime#>> to shift months. It can be applied to Time#months_since if activisupport has been loaded.
How to select INTERVAL YEAR TO MONTH
INTERVAL YEAR TO MONTH
is selected as an Integer.
conn.exec("select (current_timestamp - hiredate) year to month from emp") do |hired_months|
puts "hired_months = #{hired_months}"
end
How to bind INTERVAL YEAR TO MONTH
You cannot bind a bind variable as INTERVAL YEAR TO MONTH
implicitly. It must be bound explicitly by OCI8::Cursor#bind_param.
# output bind variable
cursor = conn.parse(<<-EOS)
BEGIN
:interval := (:ts1 - :ts2) YEAR TO MONTH;
END;
EOS
cursor.bind_param(:interval, nil, :interval_ym)
cursor.bind_param(:ts1, DateTime.parse('1969-11-19 06:54:35 00:00'))
cursor.bind_param(:ts2, DateTime.parse('1969-07-20 20:17:40 00:00'))
cursor.exec
cursor[:interval] # => 4 (months)
cursor.close
# input bind variable
cursor = conn.parse(<<-EOS)
BEGIN
:ts1 := :ts2 + :interval;
END;
EOS
cursor.bind_param(:ts1, nil, DateTime)
cursor.bind_param(:ts2, Date.parse('1969-11-19'))
cursor.bind_param(:interval, 4, :interval_ym)
cursor.exec
cursor[:ts1].strftime('%Y-%m-%d') # => 1970-03-19
cursor.close
Instance Method Summary collapse
-
#get ⇒ Object
:nodoc:.
-
#set(val) ⇒ Object
:nodoc:.
Instance Method Details
#get ⇒ Object
:nodoc:
479 480 481 482 483 484 |
# File 'lib/oci8/datetime.rb', line 479 def get() # :nodoc: val = super() return nil if val.nil? year, month = val year * 12 + month end |
#set(val) ⇒ Object
:nodoc:
473 474 475 476 477 478 |
# File 'lib/oci8/datetime.rb', line 473 def set(val) # :nodoc: unless val.nil? val = [val / 12, val % 12] end super(val) end |