我有两个数组,[1,2,3,4,7,6]并且[2,3,7]在 PostgreSQL 中可能有共同的元素。我想要做的是从第一个数组中排除第二个数组中存在的所有元素。到目前为止,我已经取得了以下成绩:
SELECT array
(SELECT unnest(array[1, 2, 3, 4, 7, 6])
EXCEPT SELECT unnest(array[2, 3, 7]));
Run Code Online (Sandbox Code Playgroud)
但是,排序不正确,因为结果{4,6,1}不是所需的{1,4,6}. 我怎样才能解决这个问题 ?
我最终使用以下定义(取自此处)创建了一个自定义函数,该函数解决了我的问题:
create or replace function array_diff(array1 anyarray, array2 anyarray)
returns anyarray language sql immutable as $$
select coalesce(array_agg(elem), '{}')
from unnest(array1) elem
where elem <> all(array2)
$$;
Run Code Online (Sandbox Code Playgroud) 在 SQL 服务器中,我有一列存储这种格式的日期:
2017-06-22T00:43:15+0300
作为字符串。
我想要做的是将这些字符串转换为实际的 datatimeoffset 数据,以便将它们作为日期处理。
到目前为止,我已经找到了多个用于从 datetimeoffset 转换为其他时间戳格式的函数,但这些函数都没有引用字符串。
https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetimeoffset-transact-sql
在 postgresql 数据库上出现完全相同的问题。到目前为止我设法实现的最好的只是截断时区并将字符串的其余部分转换为时间戳。理想情况下,我不想使用这种有损转换。
所以我在Redshift数据库上遇到以下奇怪的行为.
以下查询按预期运行将当前时间戳截断为月份:
select date_trunc('month', now()) -- returns 2019-01-01 00:00:00+00
Run Code Online (Sandbox Code Playgroud)
相反这个查询:
select date_trunc('month', now())
from table
Run Code Online (Sandbox Code Playgroud)
返回以下错误
错误:Redshift表不支持指定的类型或函数(每个INFO消息一个).
没有INFO消息,但显然问题与date_trunc()它有关,因为它是唯一使用的功能.
通常情况下,我希望它能像在PostgreSQL上一样工作,将截断的当前时间戳返回到月份的行数table.
我还采取一看这个情况下date_trunc()还没有完全支持,但我找不到任何引用.
有什么我想念的吗?任何解决方法?