从完整日期开始提取月份和年份的查询是什么。 我的数据是这样的:1/29/2008 我试过这个问题:
select ID_NO, CHECKED_DATE, to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY') AS A
from Doctor_Checkup;
但它会提供输出:1/1/2008
预期产出:1-2008
答案 0 :(得分:5)
日期没有格式 - 它是stored internally to the database 7字节(代表年,月,日,小时,分钟和秒),直到您使用的是任何用户界面(即SQL) /另外,SQL Developer,Java等)尝试将它显示给您,即用户,并将其转换为您认为有效的(通常是字符串)日期具有格式的内容。
需要注意的一点是,日期始终包含年,月,日,小时,分钟和秒组件。这样做的:
to_date(TO_CHAR(CHECKED_DATE, 'MON-YYYY'), 'MON-YYYY')
实际上和做的一样:
TRUNC( Checked_Date, 'MM' )
并且仍然会有一天,一小时,一分钟和二分组,但会被截断到该月第一天的午夜。用户界面可能只是将其首选项设置为不显示时间组件(但日期仍然有一个)。
您要做的是将日期转换为格式化字符串:
select ID_NO,
CHECKED_DATE,
TRIM( LEADING '0' FROM TO_CHAR( CHECKED_DATE, 'MM-YYYY') ) AS A
from Doctor_Checkup;
或
select ID_NO,
CHECKED_DATE,
EXTRACT( MONTH FROM CHECKED_DATE )
|| '-' || EXTRACT( YEAR FROM CHECKED_DATE ) AS A
from Doctor_Checkup;
答案 1 :(得分:4)
如果该字段已经是日期列,您只需将其转换为您想要的格式:
select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'mm-yyyy'),'0') AS A from Doctor_Checkup;
如果是文本列,则需要首先使用格式转换为日期:
select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(TO_DATE(CHECKED_DATE,'dd/mm/yyyy'),'mm-yyyy'),'0') AS A from Doctor_Checkup;
答案 2 :(得分:1)
要获得1-2008
格式,请使用以下格式修剪前导零:
select ID_NO,CHECKED_DATE,ltrim(TO_CHAR(CHECKED_DATE,'MM-YYYY'),'0') AS A from Doctor_Checkup;
答案 3 :(得分:1)
您想要一个表示月份和年份的字符串,格式为[M] M-YYYY。但是,Oracle public static void Put(string key, object value)
{
int insertionIndex = -1;
for (int i = 0; i < pArr.Length; i++)
{
if (pArr[i] != null)
{
if (pArr[i].Key == key)
{
insertionIndex = i;
break;
}
}
else if (insertionIndex < 0)
{
insertionIndex = i;
}
}
if (insertionIndex < 0)
{
throw new Exception("All slots full");
}
else
{
pArr[insertionIndex] = new Paar(key, value);
}
}
仅支持MM-YYYY,所以你必须摆脱前导零(如果有的话)。
两种解决方案:
TO_CHAR
或
trim(leading '0' from to_char(checked_date, 'mm-yyyy'))
答案 4 :(得分:0)
从(6)中选择DOCTOR_CHECKUP EXTRACT中的CHECKED_DATE(从CHECKED_DATE起的月份)和(2019年中)提取(从CHECKED_DATE起的年份);
6个月,2019年是一年