Use the following expressions to parse out the LC Class, LC Class Number, First Cutter, Second Cutter and internal year from the call number:
SUBSTRING (call_number, '^([a-zA-z]{1,3})') AS lc_class
SUBSTRING (call_number, '\d{1,}\.{0,}\d{0,}') AS lc_class_number
SUBSTRING (call_number, '\.{0,}[A-Z][0-9]{1,}') AS first_cutter
SUBSTRING (call_number, '\s{1}[A-Z]{1}\d{1,}x{0,}a{0,}b{0,}') AS second_cutter
SUBSTRING (call_number, '\s\d{4}\s\.') AS internal_year
Notes:
trim (TRAILING '.' FROM substring (he.call_number, '\d{1,}\.{0,}\d{0,}'))
To eliminate the leading decimal point, use these expression:
first cutter: trim (LEADING '.' FROM SUBSTRING (call_number, '\.{0,}[A-Z][0-9]{1,}'))
second cutter: trim (LEADING '.' FROM SUBSTRING (call_number, '\s{1}[A-Z]{1}\d{1,}x{0,}a{0,}b{0,}'))