【发布时间】:2010-12-19 09:52:12
【问题描述】:
我只需要从 SQL Server 中的日期字段访问 Month.Year。
【问题讨论】:
标签: sql sql-server tsql
我只需要从 SQL Server 中的日期字段访问 Month.Year。
【问题讨论】:
标签: sql sql-server tsql
SELECT * FROM demo
WHERE attendance_year_month < SUBSTRING(CURRENT_TIMESTAMP,1,11)
AND
attendance_year_month >= DATE_SUB(SUBSTRING(CURRENT_TIMESTAMP,1,11), INTERVAL 6 MONTH)
【讨论】:
select CONCAT(MONTH(GETDATE()),'.',YEAR(GETDATE()))
Output: **5.2020**
select CONCAT(DATENAME(MONTH , GETDATE()),'.',YEAR(GETDATE()))
Output: **May.2020**
【讨论】:
出于报告目的,我倾向于使用
CONCAT(YEAR([DateColumn]), RIGHT(CONCAT('00', MONTH([DateColumn])), 2))
您将丢失日期类型,因为它将返回 (n)varchar。但如果前导零,该列是可排序的(例如“202112”>“202102”)。您还可以在年份和月份之间添加分隔符,例如
CONCAT(YEAR([DateColumn]), '-', RIGHT(CONCAT('00', MONTH([DateColumn])), 2))
返回一些像“2020-08”这样的想法(仍然可以排序)。
【讨论】:
另一个简单的答案是从日期中删除天数
如何在 BigQuery 中进行操作
SELECT DATE_ADD(<date_field>, INTERVAL 1 - extract(day from <date_field>) DAY) as year_month_date
一个例子:
SELECT DATE_ADD(date '2021-03-25', INTERVAL 1 - extract(day from date '2021-03-25') DAY) as year_month_date
这个返回2021-03-01
【讨论】:
试试SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;
【讨论】:
我有一个特定的要求来做类似的事情,它会显示月份年份,这可以通过以下方式完成:
SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'
在我的特定情况下,我需要将其简化为 3 个字母的月份缩写和 2 位数的年份,如下所示:
SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'
【讨论】:
试试这个:
葡萄牙语
SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)
结果: maio 2019
英语
SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)
结果: 2019 年 5 月
如果您想使用其他语言,请将“pt-pt”或“en-US”更改为link中的任何一个@
【讨论】:
CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM'))
如果你想要一个六位数的结果,会给你例如 201601
【讨论】:
select convert(varchar(11), transfer_date, 106)
得到我想要的日期格式为 2018 年 3 月 7 日的结果
我的列“transfer_date”是一个日期时间类型列,我在 azure 上使用 SQL Server 2017
【讨论】:
对于结果:“YYYY-MM”
SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
【讨论】:
查询:- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName
输出:- 2019 年 1 月
我们可以使用的一般日期字段
datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName
【讨论】:
SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')
输出:2019 年 3 月
【讨论】:
从日期获取月份和年份
DECLARE @lcMonth nvarchar(10)
DECLARE @lcYear nvarchar(10)
SET @lcYear=(SELECT DATEPART(YEAR,@Date))
SET @lcMonth=(SELECT DATEPART(MONTH,@Date))
【讨论】:
MS ACCESS 或RODBC 等一些数据库可能不支持SQL SERVER 函数,但对于任何具有FORMAT 函数的数据库,您都可以这样做:
SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
【讨论】:
SELECT convert(varchar(7), getdate(), 126)
你可能想看看这个网站: http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/
【讨论】:
【讨论】:
我的数据库不支持上面的大部分功能,但是我发现这是可行的:
SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;
例如:
SELECT SUBSTR(created, 1,7) FROM table;
以“yyyy-mm”格式返回年份和月份
【讨论】:
让我们这样写:YEAR(anySqlDate) 和 MONTH(anySqlDate)。以YEAR(GETDATE()) 为例。
【讨论】:
试试这个
select to_char(DATEFIELD,'MON') from YOUR_TABLE
例如。
select to_char(sysdate, 'MON') from dual
【讨论】:
这也很有帮助。
SELECT YEAR(0), MONTH(0), DAY(0);
或
SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());
或
SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
【讨论】:
RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7)
【讨论】:
datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear
输出将如下所示:'December 2013'
【讨论】:
convert(varchar(7), <date_field>, 120)
because 120 results in 'yyyy-MM-dd' which is varchar(10)
using varchar(7) will display only year and month
example:
select convert(varchar(7), <date_field>, 120), COUNT(*)
from <some_table>
group by convert(varchar(7), <date_field>, 120)
order by 1
【讨论】:
除了已经给出的建议之外,我还可以从您的问题中推断出另一种可能性:
- 你仍然希望结果是一个日期
- 但您想“丢弃”日期、时间等
- 只留下年/月日期字段
SELECT
DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
FROM
<your_table>
这会从基准日期 (0) 获取整月数,然后将它们添加到该基准日期。因此向下舍入到日期所在的月份。
注意:在 SQL Server 2008 中,您仍会将 TIME 附加为 00:00:00.000 这与完全“删除”任何日期和时间符号并不完全相同。 也将 DAY 设置为第一个。例如2009-10-01 00:00:00.000
【讨论】:
我以两种方式解释您的问题。
a) 您只需要单独的月份和年份,在这种情况下,这就是答案
select
[YEAR] = YEAR(getdate())
,[YEAR] = DATEPART(YY,getdate())
, [MONTH] = month(getdate())
,[MONTH] = DATEPART(mm,getdate())
,[MONTH NAME] = DATENAME(mm, getdate())
b)
您想以 MONTH.YEAR 格式显示给定日期的'2009-11-24 09:01:55.483'。所以在这种情况下,输出应该是11.2009。
如果应该是这种情况,那么试试这个(以及其他选择)
select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')
【讨论】:
SELECT DATEPART(yy, DateVal)
SELECT DATEPART(MM, DateVal)
SELECT DATENAME(MM, DateVal)
【讨论】:
select month(dateField), year(dateField)
【讨论】: