如何将多个列连接成单个值以显示在下拉列表中?

时间:2012-05-07 19:48:25

标签: asp.net sql sql-server sql-server-2008

我有一个日期字段,我填充下拉列表。日期字段与此2012-05-01 00:00:00类似,我需要下拉列表看起来像5/2012。但是为了把事情搞得一团糟,我需要把日期分开,然后再将它重新组合起来。

具体来说,我需要找到所有“不同”的月份和所有“不同”的年份,但我只想找到不同的年份,如果有一个月份的日期字段,反之亦然。

所以我有以下数据

表:预算

id   Item   ItemDate
1     A     5/12/2012
2     B     5/14/2012
3     C     4/5/2012
4     D     4/7/2012
5     E     7/15/2011

所以我希望我的下拉列表仅显示以下内容:

5/2012
4/2012
7/2011

我尝试过使用

SELECT DISTINCT datepart(Month, ItemDate) + ' ' + datepart(year, ItemDate) As ddlList 
FROM Budget

但这增加了一年中的月份(5 + 2012 = 2017)。

然后我的asp

<asp:dropdownlist id="ddl1" runat="server" datasourceID="sqldatasrc" DataTextField="ddlList"></dropdownlist>

有什么想法吗?我不确定我是否会采取正确的方式。

1 个答案:

答案 0 :(得分:4)

ASP.NET

如果我没记错的话,我相信你可以使用DropDownList控件上的属性DataTextFormatString来格式化boundfield值。您必须将该属性设置为值 {0:M/yyyy} 。请确保该物业可用。我在MSDN中找不到它。

我只能找到ListControl.DataTextFormatString Property

SQL

在连接这些值之前,您必须将日期时间字段值的MONTHYEAR部分转换为VARCHAR或字符串数​​据类型。

演示

Click here to view the demo in SQL Fiddle.

脚本:

SELECT  
DISTINCT    CAST(DATEPART(MONTH, ItemDate) AS VARCHAR) + '/' + 
            CAST(DATEPART(YEAR, ItemDate) AS VARCHAR) AS ddlList 
FROM        dbo.Budget

编写相同脚本的替代方法:

SELECT  
DISTINCT    CAST(MONTH(ItemDate) AS VARCHAR) + '/' + 
            CAST(YEAR(ItemDate) AS VARCHAR) AS ddlList 
FROM        dbo.Budget;

创建并插入脚本:

CREATE TABLE dbo.Budget
(
     Id         INT         NOT NULL 
  ,  Item       VARCHAR(10) NOT NULL
  ,  ItemDate   DATETIME    NOT NULL
)

INSERT INTO dbo.Budget (Id, Item, ItemDate) VALUES
 (1, 'A', '05/12/2012'),
 (2, 'B', '05/14/2012'),
 (3, 'C', '04/05/2012'),
 (4, 'D', '04/07/2012'),
 (5, 'E', '07/15/2012');

输出:

DDLLIST
-------
4/2012
5/2012
7/2012