45

数据库中的字段 DATE 具有以下格式:

2012-11-12 00:00:00

我想从日期中删除时间并返回这样的日期:

11/12/2012
4

10 回答 10

78

首先,如果您的日期是 varchar 格式,请将日期存储为日期,这将为您省去很多麻烦,而且最好尽早完成。问题只会变得更糟。

其次,一旦有了日期,就不要将日期转换为 varchar!将其保留为日期格式,并在应用程序端使用格式来获​​取所需的日期格式。

根据您的 DBMS,有多种方法可以做到这一点:


SQL-Server 2008及更高版本:

SELECT  CAST(CURRENT_TIMESTAMP AS DATE)

SQL-Server 2005及更早版本

SELECT  DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 0)

SQLite

SELECT  DATE(NOW())

甲骨文

SELECT  TRUNC(CURRENT_TIMESTAMP)

PostgreSQL

SELECT  CURRENT_TIMESTAMP::DATE

如果您需要在报告中使用特定于文化的格式,您可以明确说明接收文本框的格式(例如 dd/MM/yyyy),或者您可以设置语言以便显示该语言的相关日期格式。

无论哪种方式,这在 SQL 之外都可以更好地处理,因为在 SQL 中转换为 varchar 会影响您在报告中可能执行的任何排序。

如果您不能/不会将数据类型更改为 DATETIME,那么CONVERT(DATETIME, yourField)在发送到报告服务之前仍将其转换为 SQL 中的日期(例如 )并按上述方式处理它。

于 2013-01-11T17:25:15.313 回答
10

只需使用,(在 TSQL 中

SELECT convert(varchar, columnName, 101)

MySQL中

SELECT DATE_FORMAT(columnName, '%m/%d/%Y')
于 2013-01-11T14:10:40.347 回答
6

我发现这个方法非常有用。但是,它将您的日期/时间格式转换为日期,但它为我需要的工作所做的工作永远不会少。(我只需要在报告上显示日期,时间无关紧要)。

CAST(start_date AS DATE)

更新

(请记住,我是一名实习生;))

如果您使用 SSRS,我想出了一个更简单的方法。

实际更改报表中字段所在的文本框属性更容易。右键单击字段>数字>日期并选择适当的格式!

于 2015-09-07T09:24:11.503 回答
3

就个人而言,我会返回完整的本机日期时间值并在客户端代码中对其进行格式化。

这样,您可以使用用户的语言环境设置为该用户赋予正确的含义。

“11/12”是模棱两可的。是吗:

  • 11 月 12 日
  • 12 月 11 日
于 2013-01-11T14:22:04.377 回答
2
SELECT DATE('2012-11-12 00:00:00');

返回

2012-11-12
于 2013-01-11T14:10:52.657 回答
2

有关更多信息,请参阅:SQL Server 日期格式

[月/日/年]

SELECT CONVERT(VARCHAR(10), cast(dt_col as date), 101) from tbl

[日/月/年]

SELECT CONVERT(VARCHAR(10), cast(dt_col as date), 103) from tbl

现场演示

于 2013-01-11T14:11:32.983 回答
1

TSQL

SELECT CONVERT(DATE, GETDATE())         // 2019-09-19
SELECT CAST(GETDATE() AS DATE)          // 2019-09-19
SELECT CONVERT(VARCHAR, GETDATE(), 23)  // 2019-09-19
于 2019-09-19T14:40:44.280 回答
0

至少在 mysql 中,您可以使用DATE(theDate).

于 2013-01-11T14:10:31.560 回答
0

您可以尝试以下方法:

SELECT CONVERT(VARCHAR(10),yourdate,101);

或这个:

select cast(floor(cast(urdate as float)) as datetime);
于 2013-01-11T14:12:02.560 回答
0

使用这个 SQL:

SELECT DATE_FORMAT(date_column_here,'%d/%m/%Y') FROM table_name;
于 2013-01-11T14:13:37.533 回答