2017-08-21 48 views
-1

我可以将一个从postgresql数据库中的日期提取的年份映射到C#int。如何将一年映射到一个整数?

select extract(year from current_date) "Year"; 

我收到以下错误:Can't cast database type float8 to Int32

我怎么能检索一年的整数,因为它应该自然做?根据PostgreSQL的

select extract(year from current_date)::integer "Year"; 
+0

你在C#代码或直接从查询中得到这个错误吗? – Steve

+0

@Steve我在映射时在C#端得到错误 – sinsedrix

+0

文档状态_“提取函数返回类型为double precision的值”_ https://www.postgresql.org/docs/8.0/static/functions-datetime .html#FUNCTIONS-DATETIME-EXTRACT – PaulF

回答

1

可以在请求投值

  • 铸提取结果作为PMerlet回答的整数
  • 结果分配给双在c#
  • 做铸造整数在C#

int someInt = (int)someDouble; 
+0

为什么你先将数字转换为数字? –

+0

确实@PMerlet,'选择摘录(年份从current_date)::整数“年份”;'似乎也工作,是否有理由先施加'数字'? – sinsedrix

+0

没有理由,那是一个错误。我相应地更新我的答案。 – PMerlet

0

manual提取物返回双精度不整数

extract(field from timestamp) double precision 

你要么:

+0

我明白'解压缩(从时间戳字段)'返回一个双,问题是如何检索一个int映射,而不是如何做一个演员 – sinsedrix

+0

你的问题似乎暗示你期望一个int返回而不是一个双。提取函数的结果需要在某个时刻将转换(转换)为整数,因此您需要知道如何进行转换 - 您需要清楚地询问您的问题。这个答案给了你三个可行的选择,所以不值得赞赏。还有第四个选项更符合标准SQL - 选择CAST(提取(current_date年)AS整数)“Year”; _ https://www.postgresql.org/docs/8.0/static/sql-expressions。 HTML#SQL-SYNTAX-TYPE-铸件 – PaulF

相关问题