繁体   English   中英

如何在SQL中使用列名查询日期?

[英]How to query date with a column name in SQL?

如何从存储的数据中只查询日期而不是时间? 我尝试了以下方法:

select FirstName, dob from table1 where rno='123';

我需要的是dob只返回日期和列名,因此我可以稍后在 ac# .net 项目中使用该值。 另外,是否可以更改日期的格式? 如何将其自定义为DD-MM-YYYYYYYY-MM-DD

查看DATE_FORMAT

所以试试

select FirstName, DATE_FORMAT(dob, '%d-%m-%Y') as dob from table1 where rno='123';

处理此问题的最佳方法是返回完整且未格式化的日期时间值,并让您的 C# 代码担心格式化它并仅显示日期。

换句话说,根本不要更改问题中的 SQL。

这将节省数据库的工作(并因此提高可扩展性),同时也使您的应用程序更容易自动适应用户的首选格式。 因此,英国用户可能会看到dd/MM/yyyy ,而美国用户可能会从相同的代码看到MM/dd/yyyy

这究竟如何工作在很大程度上取决于您的应用程序的上下文,该信息不在问题中,但归结为确保当前进程的CultureInfo是正确的(即:由 Windows 中的当前区域性设置提供或推断通过 ASP.Net 从浏览器用户代理和请求头),然后使用短日期字符串标准日期时间格式字符串进行格式化

但是如果你真的想在数据库中这样做,你可以使用FORMAT()函数,并使用AS关键字命名结果,以便你可以在以后的代码中引用它:

SELECT FORMAT(dob, 'dd/MM/yyyy') AS dob FROM table1 WHERE rno='123';

或者

SELECT FORMAT(dob, 'yyyy-MM-dd') AS dob FROM table1 WHERE rno='123';

此时,C# 将接收一个字符串而不是 DateTime 值。 同样,让数据库返回 DateTime 值并让 C# 代码担心在需要时获取正确的字符串表示是非常好的主意。

如果您想删除隐私问题的时间(我认为不是这种情况),您可以将其转换为 DATE。

select FirstName, CAST(dob as DATE) AS dob from table1 where rno='123';

如果没有,我会将日期从 SQL 原样转换为 C#,并且只在视图中进行格式化。 避免 DATE_FORMAT 并转换为字符串。 这样,您可以:

  1. 做日期操作:例如日期添加

  2. 进行日期比较或计算:例如比 x 更旧?

  3. 种类

  4. 转换为用户的本地格式。

    等等。

如果您在 SQL 中将其转换为字符串,在大多数情况下,您最终会将其从字符串转换回 DateTime 类,如果不是现在,则在 5 年内,当您的项目范围增加时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM