To be honest, you're probably storing it wrong if you need to do that.
Storing data as NVARCHAR is simple, and easy for your app code, but it's a PITA to work with when you want to do anything with it, as you are string to see.
Instead, I'd store it as two non-string columns, a "start" and an "end" time column. The column content would depend on what I wanted to do with the data, and what it's for, but the simplest solution is to store it as an integer: "hours since midnight". Then your formatting it for your string becomes pretty simple: I'd write an SQL function that accepts an integer, and returns the time string:
CREATE FUNCTION [dbo].[HourToString]
(
@Hour INT
)
RETURNS NVARCHAR(4)
AS
BEGIN
RETURN CASE WHEN @Hour = 0 THEN '12AM'
WHEN @Hour < 12 THEN CONVERT(NVARCHAR(4), @Hour) + 'AM'
WHEN @Hour = 12 THEN '12PM'
ELSE CONVERT(NVARCHAR(4), @Hour - 12) + 'PM'
END
END
And everything else gets easier to work with later as well. Such as checking if you are in that time period, and so on!