• Interesting and good to know! I come from a functional background, and when I encountered this did not know it was a 'standard' way to do things. At the time I was much stronger in Crystal than straight TSQL, and did parse & concatonate as you mention. Ended up with the below to get user friendly times. Obviously this only worked because the value was a time, not a duration. Had it been a duration I would have been one of those you mention who put something together that "fell down" for anything over 24 hours. Thanks for an improved way to approach this!!!

    select {tblScheduleDetail.StartTime}

    Case 0:

    "12:00 AM"

    Case 1 to 999:

    "12:0"&left(cstr({tblScheduleDetail.StartTime}),1)

    &" AM"

    Case 1000 to 9999:

    "12:"&left(cstr({tblScheduleDetail.StartTime}),1)& mid(cstr({tblScheduleDetail.StartTime}),3,1)

    &" AM"

    Case 10000 to 99999:

    left(cstr({tblScheduleDetail.StartTime}),1)&":"& mid(cstr({tblScheduleDetail.StartTime}),2,1)&

    mid(cstr({tblScheduleDetail.StartTime}),4,1)&" AM"

    case 100000 to 119999:

    left(cstr({tblScheduleDetail.StartTime}),2)&":"& mid(cstr({tblScheduleDetail.StartTime}),3,1)&

    mid(cstr({tblScheduleDetail.StartTime}),5,1)&" AM"

    case 120000 to 240000:

    left(cstr({tblScheduleDetail.StartTime}),2)&":"& mid(cstr({tblScheduleDetail.StartTime}),3,1)&

    mid(cstr({tblScheduleDetail.StartTime}),5,1)&" PM"

    ;;