# Parse semantic version
> Supported in: Batch, Streaming
Parses a semantic version string into a logical type. Supports both release versions (e.g., "0.987.0") and versions with prerelease metadata (e.g., "0.987.0-16-gb3fb285"). Returns null for strings that do not match the expected format.
**Expression categories:** String
## Declared arguments
* **Version string:** Semantic version string. Supports both release versions (major.minor.patch) and versions with prerelease metadata (major.minor.patch-prerelease).
*Expression\*
**Output type:** *Semantic Version*
## Examples
### Example 1: Base case
**Argument values:**
* **Version string:** `version`
| version | **Output** |
| ----- | ----- |
| 0.987.0-16-gb3fb285 | {
major -> 0,
minor -> 987,
patch -> 0,
prerelease -> \[ 16-gb3fb285 ],
} |
| 1.0.0-0-g0000000 | {
major -> 1,
minor -> 0,
patch -> 0,
prerelease -> \[ 0-g0000000 ],
} |
| 2.5.3-42-gabc1234 | {
major -> 2,
minor -> 5,
patch -> 3,
prerelease -> \[ 42-gabc1234 ],
} |
| 0.987.0-SNAPSHOT | {
major -> 0,
minor -> 987,
patch -> 0,
prerelease -> \[ SNAPSHOT ],
} |
***
### Example 2: Base case
**Argument values:**
* **Version string:** `version`
| version | **Output** |
| ----- | ----- |
| 0.987.0 | {
major -> 0,
minor -> 987,
patch -> 0,
prerelease -> \[ ],
} |
| 1.0.0 | {
major -> 1,
minor -> 0,
patch -> 0,
prerelease -> \[ ],
} |
| 2.5.3 | {
major -> 2,
minor -> 5,
patch -> 3,
prerelease -> \[ ],
} |
***
### Example 3: Null case
**Argument values:**
* **Version string:** `version`
| version | **Output** |
| ----- | ----- |
| *null* | *null* |
***
### Example 4: Edge case
**Argument values:**
* **Version string:** `version`
| version | **Output** |
| ----- | ----- |
| invalid version string | *null* |
| not-a-version | *null* |
| 1.0 | *null* |
***