2016-07-07 193 views
2

嗨大家好我只是SQL中的新手。将SQL值从000000转换为00:00:00

我有一列显示开始时间042000和结束时间050000.字段名称是starttme char(8)。我想要做的是将显示的值从042000格式化为04:20:00

这是我到目前为止所尝试的,它不工作。

select convert(char(8), starttme,101) as Start Time 
from sampletable 

这就是我如何gridview的

VB

Protected Sub loadgrid() 
    For Each dt As System.Data.DataTable In prod2() 
     Dim i As Integer = i + 1 
     Dim dv As New System.Data.DataView(dt) 
     Dim dt2 As System.Data.DataTable = dv.ToTable(False, {"Start Time", "End Time"}) 

     Select Case i 
      Case 1 

       GridView1.DataSource = dt2 
       GridView1.DataBind() 

      Case 2 -- codes here -- 
      Case 3 -- codes here -- 


     End Select 
    Next 



End Sub 

前端

<asp:GridView ID="GridView1" class = "grd" runat="server"></asp:GridView> 

任何帮助将非常感激显示。谢谢! :)

+2

格式的UI,而不是在数据库。 – DavidG

+2

不要在varchar列中存储日期/时间,请使用正确的数据类型! – jarlh

+1

@DavidG错误,如果它是一个时间值,将其作为时间值存储。 – Pred

回答

4

如果你想看到在SQL Management Studio中的输出,你可以做这样的:

SELECT STUFF(STUFF(col, 4, 0, ':'), 2, 0, ':') 
FROM ... 

但是,格式应做更加接近你显示值的层,例如,在UI层(如果您的系统有一层),产生输出文件的层中,等等。

2

试试这个:

SELECT STUFF(STUFF('042000', 3, 0, ':'), 6, 0, ':') 

这将输出:

04:20:00 
0

如果时间始终是6个位数,你可以做这样的:

select SUBSTRING (starttme, 1, 2) + ':' + SUBSTRING (starttme, 3, 2) + ':' + SUBSTRING (starttme, 5, 2) 
+0

如果我想让它仅显示4位数字,该怎么办?我如何删除最后两位数字?是否可以添加AM/PM?谢谢。 –

+0

你可以做任何你想做的事! select SUBSTRING(starttme,1,2)这段代码的意思是:用starttme给我从字符1和2(如果starttme是123456然后给你回12)最后你可以添加.... +'AM '或'PM' –

0

可以使用,

select STUFF(STUFF('042000', 3, 0, ':'), 6, 0, ':') as [Start Time] 
from sampletable 
+0

这与[JaydipJ的回答](http://stackoverflow.com/a/38240091/2451726) – Arulkumar