我正在使用一个数据集,该数据集有一个标题为"Birth_DT"的列,我试图从该列计算成员18个月前的年龄.

下面是"SELECT DISTINCT(Birth_DT)FROM Table.DB Limit 9;"显示的列:

birth_dt
-----------------------
1990-08-15 00:00:00.000
1986-05-30 00:00:00.000
1981-03-03 00:00:00.000
1970-05-11 00:00:00.000
1963-01-20 00:00:00.000
1985-01-26 00:00:00.000
1983-01-03 00:00:00.000
2021-01-03 00:00:00.000
1995-11-14 00:00:00.000

在雅典娜,这一栏显示为"字符串".

到目前为止,我try 的是:

select DATE_DIFF('year', birth_dt, (current_timestamp - interval '18' month)) as age from table.DB limit 10; 

它一直给我一个错误,说:

"语法_错误:第1:8行:函数DATE_DIFF的意外参数(varchar(4),varchar,TIMESTAMP WITH时区).预期:DATE_DIFF(varchar(X),time,time),DATE_DIFF(varchar(X),TIME WITH时区,TIME WITH时区),DATE_DIFF(VARCHAR(X),TIMESTAMP WITH时区),DATE_DIFF(varchar(X),DATE,DATE),DATE_DIFF(varchar(X),TIMESTAMP,TIMESTAMP)"

因此,我try 只专注于将"Birth_dt"列更改为有效日期,但以下内容无济于事:

select date_parse(birth_dt, '%YYYY-%MM-%dd') as age from table.DB limit 10;

select cast(from_iso8601_timestamp("birth_dt.1") AS date) as age from table.DB limit 10;

SELECT date_parse(birth_dt,'%Y-%m-%dT%H:%i:%s%+00:00') as date_column,
current_timestamp as Todays_Date,
date_diff('day',current_timestamp,date_parse(birth_dt,'%Y-%m-%dT%H:%i:%s%+00:00')) as difference
FROM table.DB limit 10;

这些查询最后给出的错误如下所示:

"INVALID_Function_ARGUMENT:无效格式:"1990-08-15 00:00:00.000"在"-08-15 00:00:00.000"处格式不正确"

"INVALID_FUNCTION_ARGUMENT: Invalid f或mat: "1990-08-15 00:00:00.000" is malf或med at "00:00:00.000""

What I want to eventually have f或 my examples above is:

Age
---
31
35
40
51
58
36
38
1
25

请救救我!谢谢!

推荐答案

在这里,提供有效的格式至关重要.在接近成功的情况下,try 以下几种方法:

-- sample data
WITH dataset(birth_dt) AS (
    values ('1983-01-03 00:00:00.000'),
        ('2021-01-03 00:00:00.000')
)

-- query
select date_diff(
        'year',
        date_parse(birth_dt, '%Y-%m-%d %T.%f'),
        current_timestamp - - interval '18' month)
from dataset;

输出:

_col0
41
3

判断MySQL Date Functions个文档中所有受支持的格式说明符及其含义.

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

GROUP BY和GROUP_CONCAT用于计算比赛排名

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

具有多个条件的SQL否定

动态组/转置

使用与JOIN一起使用的查询后进行分页和排序

使用多个WITH子查询的替代方法

如何在T-SQL中编写row_number的WHERE子句?

将SQL Server查询改进为;线程安全;

查询以从时间范围列表中查找唯一时间段

Select 组中的第一行,但在并发环境中

YEAR 函数仍然不可SARGable 吗?

使用 XML 作为 SQL 表

用户定义的标量值函数是否仍然会阻止并行性?

Postgres更新增量之间的差异

Select 字段,除非另一个字段包含重复项

在 postgresql 中保存带有时间戳的几何类型数据

基于源表的 SQL INSERT、UPDATE 和 DELETE

sql count distinct by column 和 sum false 和 true

在sql server中创建唯一标识符列